我正在努力了解OpenMPI中的信号处理。我读到“Open MPI将SIGUSR1和SIGUSR2从mpiexec转发到其他进程”。我的问题是,这是默认安装启用此功能。OpenMPI中的信号处理错误
这种情况是,一个MPI进程产生一个SIGUSR1,必须通过'orted'来检测,然后转发给其他进程。
在我的测试代码中,我为SIGUSR1定义了一个自定义信号处理程序,并相应地注册了该信号处理程序。我使用kill()或raise()发送一个信号。我假设ORTE守护进程会收到这个信号,并且必须将这个信号转发给剩下的进程。
// test.c的
void handle_signal(int signal){
if(SIGNAL==SIGUSR1)
printf("received SIGUSR1 signal \n");
}
int main(){
MPI_Init(NULL, NULL);
int my_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
signal(SIGUSR1, handle_signal);
if(my_rank == 1) // process with rank 1 raises SIGUSR1
kill(getpid(), SIGUSR1);
MPI_Finalize();
return 0;
}
如果我跑这是 的mpirun -np 3 ./test
我希望有从其他两种工艺印制两次的声明。但是当我运行这个代码时,它只打印一次,ORTE HNP也是如此,与应用程序不同。我是否需要调用任何其他的API来显式传递此信号,以便应用程序进程接收SIGUSR1。
- 马克
我也试过这个。每个进程发布它的pid,并使用它从另一个shell中使用kill -SIGUSR来提高信号。它仍然打印一次,我期望信号处理程序中的语句为每个进程打印两次 –
marc
我认真地认为您使用错误的工具来实现您尝试的任何操作。 – Zulan