我正在努力瞭解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