4

正確には何をしkillますか?

100個の(例として)子プロセスを次々に作成する親プロセスがあります。子供の仕事の終わりに、私は子供を殺します、そして私はそれを出力kill(pid_of_child, SIGKILL)で見ることができません。psしかし、親プロセスに問題が発生し、で親プロセスを終了した場合exit(1)(この時点では、子は1つだけです。チェックインできますps)、その時点で、親プロセスの<defunct>プロセスがppid多数表示されます。pid

そんなことがあるものか?kill子プロセスを完全に殺しませんでしたか?

4

3 に答える 3

8

kill何も殺しません。ターゲットプロセスにシグナルを送信します。SIGKILL単なる信号です。さて、 -プロセスによって処理または無視できないSIGKILLため、実際には唯一のアクション-の標準アクションは終了することです、それは本当です。SIGKILL

「<defunct>」プロセスは、リープされていないです。つまり、親はwait()子の終了ステータスを取得するために呼び出していません。親が電話wait()をかけるまで、機能しなくなった(または「ゾンビ」)プロセスがハングアップします。

于 2011-12-12T01:12:15.110 に答える
7

プロセスが終了するときはいつでも、それがどのように終了するか(またはそれ以外の場合)に関係なく、親プロセスが終了ステータス(withおよびfriends)killを取得するまで、プロセスはカーネルのプロセステーブルに残ります。waitプロセステーブルに残しておくと、多くの厄介な競合状態を回避できます。

親プロセスが終了した場合、子はに再割り当てされる必要がinitあります。これにより、定期的に子が刈り取られます。

于 2011-12-12T01:11:51.663 に答える
1

はい、SIGKILLはプロセスを終了しますが、いずれの場合も(通常の終了または終了)、プロセスには終了ステータスがあり、潜在的なリーダーのために保持する必要があります。これが完了するまで、プロセステーブルのエントリが残る場合があります。http://en.wikipedia.org/wiki/Zombie_processを参照してください。

于 2011-12-12T01:11:25.097 に答える