エグゼクティブサマリー:_spawnlを介して生成し、_pipeからFDを使用して通信しているWindowsプロセスが停止したかどうかを判断する方法が必要です。
詳細:
Windowsの低レベルCRT関数(_eof、_read)を使用して、(P_NOWAITを使用した)_spawnlの呼び出しを介して生成されたプロセスと通信しています。_pipeを使用して、この生成されたプロセスと通信するファイル記述子を作成し、それらの記述子(FD#)をコマンドラインで渡します。
スポーンされたプロセスを制御していないことは言及する価値があります。それは私にとってブラックボックスです。
スポーンしているプロセスがときどきクラッシュすることがわかりました。クラッシュを検出することで、コードをこれに対して堅牢にしようとしています。残念ながら、これを行う方法がわかりません。プロセスが停止した場合、これらの記述子の1つで_eofまたは_readを呼び出すと、エラーステータス(-1)が返されると予想するのは妥当なようです。
残念ながら、そうではありません。記述子には、生成されたプロセスとは独立した独自の寿命があるようです。そのため、もう一方のプロセスが停止していても、通信に使用しているファイル記述子にエラーステータスは表示されません。
ネストされたプロセス(_spanwnl呼び出しから返される)のPIDを取得しましたが、それを使用して実行できることは何も表示されません。私のコードは、1つを除いて本当にうまく機能します。生成されたプロセスが単に答えを計算するのに忙しいのか、それとも死んだのかを検出できません。
_pipeと_spawnlからの情報を使用して、生成されたプロセスが停止しているかどうかを判断できれば、私は金色になります。
提案は大歓迎です。
前もって感謝します。
更新:私はかなり単純な解決策を見つけ、それを選択された答えとして追加しました。