3

手順:

別のプログラム グループでプロセスを fork して開始
SIGTSTP でプロセスを停止
SIGCONT でプロセスを再開 プロセス
が終了

問題: SIGCHLD ハンドラーには次のものがあります。

waitpid(-1, &status, WNOHANG | WUNTRACED);

pid=0 と WIFEXITED=1 を返すと、プロセスは終了しましたが、pid を取得できませんか? ピッドが必要です。

マニュアルページより: 「WNOHANG が指定され、pid で指定された 1 つ以上の子 (ren) が存在するが、まだ状態が変更されていない場合、0 が返されます」
しかし、ステータスは exited に変更されたようです。

4

2 に答える 2

4

返された pid が 0 の場合、ステータスは意味がありません。考えてみてください。0 が返された場合は、まだ状態が変化していない子が 1 つ以上あることを意味します。まだ状態を変えていない子供の状態はどうなるでしょうか? 複数の子がいた場合、ステータス コードはどの子を参照していますか?

これは、呼び出しが成功したときに errno をチェックすることに似ています。以前の呼び出しからのすべてが errno に含まれる可能性がありますが、通常、errno は成功時に設定されないため、最近成功した呼び出しとは関係ありません。

于 2014-01-31T16:35:11.920 に答える