5

私は他の外部プロセスを実行しなければならないプログラムを書いています。現在、プログラムはpopenを介してプロセスのコマンドラインを起動し、出力を取得してから、pcloseを介して終了ステータスを取得します。

ただし、実行速度の速いプロセス(たとえば、起動されたプロセスがすぐにエラーになる)の場合、pclose呼び出しは終了ステータスを取得できません(pcloseは-1を返し、errnoはECHILDです)。

プロセス終了の「イベント」と結果のリターンコードのキャプチャを保証する方法を除いて、popen / pcloseタイプの動作を模倣する方法はありますか?pcloseと起動されたプロセスの終了に伴う固有の競合状態を回避するにはどうすればよいですか?

4

2 に答える 2

3

フォーク/実行/待機

popenは、fork/exec呼び出しを単純化するための単なるラッパーです。子の出力を取得する場合は、パイプを作成し、forkを呼び出し、子のファイル記述子をパイプに複製してから、execを実行する必要があります。親はパイプからの出力を読み取り、waitを呼び出して子の終了ステータスを取得できます。

于 2009-08-03T17:45:59.350 に答える
1

vfork()とexecv()を使用できます。

于 2009-08-03T17:35:03.820 に答える