ゾンビプロセスとは:
これは終了したプロセスですが、プロセス記述子がメモリに残っているため、すべてがメモリからすぐに削除されるわけではありません。
プロセスの通常の動作はどうあるべきか
プロセスが終了すると、プロセスのステータスは
EXIT_ZOMBIE
また、プロセスの親プロセスには、その子プロセスが終了したことが通知されます。
SIGCHLD
signal.
その後、親プロセスは
wait()
システムコールが死んだプロセスの終了状態やその他の情報を読み取るためのもの。変更後
wait()
が呼ばれると、ゾンビプロセスがメモリから削除されます。これは迅速に行われるため、システムにゾンビ プロセスが蓄積されることはありません。ただし、複数のゾンビプロセスが蓄積されている場合、これはプログラムコードが効率的ではない状況です
ゾンビプロセスを見つける方法:
コマンドの実行
top
コマンドの実行
ps -ef | grep defunct
ゾンビプロセスの蓄積を終了する方法:
ほとんどの場合、ゾンビ プロセスには同じ親プロセス ID があります
プロセスを削除するには、次の2つの方法があります。
- 送信
SIGCHLD
親プロセスにシグナルを送ります。
このシグナルは、親プロセスに wait()
システムコールを行い、そのゾンビの子をクリーンアップします。
kill -s SIGCHLD <PPID>
Example:
kill -s SIGCHLD 2201
kill -9 <PPID>
Example:
kill -9 2201