【发布时间】:2017-12-31 18:27:32
【问题描述】:
我正在努力了解 OpenMPI 中的信号处理。我读到“Open MPI 会将 SIGUSR1 和 SIGUSR2 从 mpiexec 转发到其他进程”。我的问题是默认安装是否启用了此功能。
场景是一个 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,这与应用程序进程不同。我是否需要在 orted 上调用任何其他 API 显式传递此信号,以便应用程序进程接收 SIGUSR1。
- 马克
【问题讨论】: