2

で指定された子プロセスがありますpid。このプロセスは次のようになります。

  1. ランニング
  2. 無効/ゾンビ(未刈り)
  3. すでに刈り取られている(したがって、もはや存在しない)

このプロセスを強制終了し、ゾンビが残っていないことを確認したいと思います。現在、私のコードは

kill(pid, SIGKILL);
int temp;
waitpid(pid, &temp, 0); 

これは機能しますか?

編集:によって指定されたプロセスpidは私のプログラムの子です。

4

2 に答える 2

2

正常に動作するはずですが、waitpidの戻り値を必ず確認してください。信号が原因でコールが戻った可能性があります。

于 2012-05-07T08:04:06.057 に答える
2

これまでのところ問題ないように見えますが、なぜケース3を発生させるのでしょうか。子プロセスのどれが終了し、刈り取られるのを待っている簿記を実行する必要があります。1つの方法は、のハンドラーをインストールして、aが正常でSIGCHLDあることを示すフラグを設定することwaitpidです。そうすれば、すべてのpidが実際には子プロセスのものであることを保証できます。

于 2012-05-07T08:13:40.573 に答える