孤児プロセスとゾンビプロセスの違い

UNIX プロセス

概要

Dockerを触っていたらorphan(孤児の意)というプロセスの存在を知ったのでゾンビプロセスとの違いを調べてみた。

ゾンビプロセスとは

  • 処理が終了した子プロセス
  • プロセステーブルに残った状態で親プロセスのwaitを待つ
  • システムリソースは使用しないが、PIDは保持される
  • ゾンビプロセスが大量に増えると、使用可能なPIDが減り、他のプロセスを起動できなくなる
  • ゾンビプロセスの確認方法
    • ps auxでstatがZ、末尾がdefunctのものがゾンビプロセス
    • ps -ef | grep defunctでゾンビプロセスだけ出力
  • ゾンビプロセスのkill
    • 親プロセスをkillする

孤児プロセス

  • 親プロセスがwaitせずに終了してしまったプロセス
  • initプロセス(PIDが1)の子プロセスとなり、initプロセスが親(≒里親)となる
  • 孤児プロセスの確認方法
    • ps -elf | head -1; ps -elf | awk '{if ($5 == 1 && $3 != "root") {print $0}}' | head
  • 孤児プロセスのkill
    • killコマンドでOK

参考

About the author

Image

bmf san @bmf_san
A web developer in Japan.