で指定された子プロセスがありますpid
。このプロセスは次のようになります。
- ランニング
- 無効/ゾンビ(未刈り)
- すでに刈り取られている(したがって、もはや存在しない)
このプロセスを強制終了し、ゾンビが残っていないことを確認したいと思います。現在、私のコードは
kill(pid, SIGKILL);
int temp;
waitpid(pid, &temp, 0);
これは機能しますか?
編集:によって指定されたプロセスpid
は私のプログラムの子です。
正常に動作するはずですが、waitpidの戻り値を必ず確認してください。信号が原因でコールが戻った可能性があります。
これまでのところ問題ないように見えますが、なぜケース3を発生させるのでしょうか。子プロセスのどれが終了し、刈り取られるのを待っている簿記を実行する必要があります。1つの方法は、のハンドラーをインストールして、aが正常でSIGCHLD
あることを示すフラグを設定することwaitpid
です。そうすれば、すべてのpidが実際には子プロセスのものであることを保証できます。