2016-09-06 7 views
0

私のmpiアプリケーションはctrl-Cを捕捉するシグナルハンドラを持っています。あるいは、1つのウィンドウを切り捨てて、cmdウィンドウでこのアプリケーションをシリアルで実行すると動作します。それは傍受され、コードは最後の出力を行い、コードは正常に終了します。ウィンドウ上でmpiexecを通して信号を渡すには?

しかし、「mpiexec -np 2 myparapp.exe」と並行して実行し、ctrl-Cまたはctrl-breakを押すと、シグナルが殺されるため、アプリケーションに到達しないように見えます突然。私のシグナルハンドラがコード内の特定の場所に登録されているように、何か特別なことはありますか?

私はMSMPIを使用していますが、私はmpichのフォークであると理解しています。 Microsoftの

+0

どのMPI実装を使用していますか? OpenMPIの場合は、http://linux.die.net/man/1/mpiexecを参照してください。 – user3630220

+0

'mpiexec'はあなたのプロセスを意図的に殺すことによってcontrol-Cに応答している可能性があります。あるいは、おそらくcontrol-Cを捕まえておらず、殺されているようです。これを修正する方法があるかどうかは、特定の実装に依存することになります。 (Cランタイムはそれらをある程度エミュレートしますが、Windowsには実際に信号がないことに注意してください) –

答えて

1

人々は親切現在のところ、子プロセスに直接はCtrl-C/Ctrlキーを押しながらBreakイベント を渡すことはできません、と私に戻っ

を得ました。 Mpiexecには、Ctrl-Cハンドラがあり、 にアプリケーションを完全に終了させるが、Ctrl-C イベントはプロセスに渡されない。

現在、mpiexec用のラッパーを作成して信号を傍受し、ファイルを停止してアプリケーションに送信するようにしています。

+0

Mpiexecがシャットダウンしようとしていることをアプリケーションが認識できるかどうかを尋ねたい場合がありますきれいに。 –

関連する問題