2016-09-06 103 views
0

我的mpi應用程序有一個信號處理程序來捕獲ctrl-C或ctrl-break一個窗口,並且當此應用程序在cmd窗口中以串行方式運行時,它可以工作。它被攔截,然後代碼完成其最後的輸出,並且代碼優雅地退出。但是,當我將它與例如「mpiexec -np 2 myparapp.exe」並行運行並按下ctrl-C或ctrl-break時,該信號似乎無法訪問我的應用程序,因爲它被殺死突然。有什麼特別的我需要做的,如確保我的信號處理程序在代碼中的特定位置註冊?如何在Windows上通過mpiexec傳遞信號?

我正在使用MSMPI,我知道這是一個來自mpich的分支。

+0

您正在使用哪種MPI實現?如果OpenMPI,你可能想看看http://linux.die.net/man/1/mpiexec。 – user3630220

+0

似乎'mpiexec'通過殺死你的進程來響應control-C,可能是故意的,或者它可能只是沒有捕獲到control-C而被自己殺死。是否有任何方法可以解決這個問題將取決於具體的實施。 (可能有助於指出Windows實際上沒有信號,儘管C運行時在一定程度上模擬了它們。) –

回答

1

在微軟的鄉親們親切地回來給我,

目前,它是不可能直接通過按Ctrl-C/Ctrl鍵 - 中斷事件 的子進程。 Mpiexec擁有Ctrl-C處理程序來處理 ,乾淨地中止應用程序,但它不會將Ctrl-C 事件傳遞給進程。

我目前正在追求編寫一個封裝mpiexec,將攔截信號,並放下文件,以通知應用程序,它應該退出。

+0

您可能想問問您的應用程序是否可以執行任何操作來識別Mpiexec試圖關閉它乾淨。 –