ゾンビプロセスを処理するLinux
Linuxにおいて、ゾンビプロセスとは子プロセスが終了したが、親プロセスがまだ対応していないプロセスを指す。ゾンビプロセスの処理方法は以下のとおりだ。
- 親プロセスを再起動する。親プロセスがデーモンや再起動可能なプロセスであれば、親プロセスを再起動することでゾンビプロセスに対処できます。親プロセスが再起動されると、オペレーティングシステムが自動的にゾンビプロセスを回収します。
- killコマンドを使用する:killコマンドを使用し、SIGCHLDシグナルを親プロセスへ送信します。このシグナルは、子プロセスの終了を親プロセスに通知します。親プロセスはSIGCHLDシグナルを受信後、wait()またはwaitpid()システムコールを利用し、ゾンビプロセスの待機や回収を行います。
- nohupコマンドは、サブプロセス起動時にその親プロセスをinitプロセス(プロセスIDは1)に設定できます。initプロセスはゾンビプロセスの回収を処理しているので、この方法でゾンビプロセスに対処できます。
- SIGCHLDシグナルを受け取るシグナルハンドラ関数を親プロセスで書く。このシグナルハンドラ関数内で、wait()またはwaitpid()システムコールを使ってゾンビプロセスを回収する。
- コードを修正する: コードを自分で書いている場合は、ゾンビプロセスの処理ロジックをコードに追加できます。子プロセスが終了したら、wait() または waitpid() システムコールを積極的に呼び出してゾンビプロセスを回収します。
いずれの方法でもゾンビプロセスの対処の肝は、親プロセスが子プロセスのリソースを確実に回収し、ゾンビプロセスが大量発生してシステムリソースを占有することを回避することだ。