私は他の外部プロセスを実行しなければならないプログラムを書いています。現在、プログラムはpopenを介してプロセスのコマンドラインを起動し、出力を取得した後、pcloseを介して終了ステータスを取得します。popen/pcloseの代替手段ですか?
しかし、何が起こっているのかは、実行中のプロセス(例えば、起動されたプロセスのエラーが素早く消滅した場合など)ではpclose呼び出しが終了ステータスを取得できないことです(pcloseは-1を返し、errnoはECHILDです)。
popen/pclose型の動作を模倣する方法はありますか?ただし、プロセス終了の "イベント"とその結果の戻りコードの取得を保証する方法はありますか? pcloseの固有の競合状態と起動プロセスの終了を避けるにはどうすればよいですか?
ポケモンは、フォークを持たないウィンドウで使用できるので、明らかに必ずしもラッパーではありません。 –
私はこれを行うコード(fork/exec/dup/etc。)を書き直しましたが、今度はwaitpid(...)を断続的に失敗させて-1/errno = ECHILDを返します。クラップ – Joe
Ok:これを分かりました。このコードは素晴らしいです。 popen/pcloseの私の古いコードはうまくいきます。うまくいかなかったのは、継承した共通コードに埋め込まれた隠されたSIGCHLDハンドラでした。ああスナップ。私は基本的にそのハンドラ(単にwaitpid(-1、...)を呼び出していた)と競合していました。習得したこと:すべてのマニュアルページを読んで、何も想定してはいけません! – Joe