ゾンビプロセス (ゾンビプロセス) とは | 意味や読み方など丁寧でわかりやすい用語解説

作成日: 更新日:

ゾンビプロセス (ゾンビプロセス) の読み方

日本語表記

ゾンビプロセス (ゾンビプロセス)

英語表記

zombie process (ゾンビプロセス)

ゾンビプロセス (ゾンビプロセス) の意味や用語解説

ゾンビプロセスとは、プログラムの実行が完了したにも関わらず、プロセス管理テーブルにその情報が残存している状態を指す。プロセスは、プログラムを実行するためにOSから割り当てられたリソース(メモリ、CPU時間など)の集合体であり、通常、実行が完了するとOSによってプロセス管理テーブルから削除される。しかし、何らかの理由でこの削除処理が正常に行われず、プロセス情報だけが残ってしまう現象がゾンビプロセスである。 ゾンビプロセスは、実際には何も処理を実行していないため、CPU時間やメモリなどのリソースを消費することはない。そのため、システム全体のパフォーマンスに直接的な影響を与えることは少ない。しかし、プロセス管理テーブルのエントリを占有し続けるため、放置すると利用可能なプロセスIDを枯渇させる可能性がある。プロセスIDは、OSがプロセスを識別するために割り当てる一意の番号であり、上限が存在する。ゾンビプロセスが大量に発生し、プロセスIDを使い果たしてしまうと、新たなプロセスを起動できなくなるという深刻な事態を引き起こす。 ゾンビプロセスが発生する主な原因は、親プロセスが子プロセスの終了ステータスを適切に取得していないことにある。Unix系OSでは、プロセスはfork()システムコールを用いて子プロセスを生成する。子プロセスが終了すると、OSは親プロセスに対してSIGCHLDシグナルを送信し、子プロセスの終了を通知する。親プロセスはwait()またはwaitpid()システムコールを用いて、子プロセスの終了ステータス(正常終了、エラー終了などの情報)を取得する必要がある。この終了ステータスを取得する処理を怠ると、子プロセスはゾンビプロセスとなってしまう。つまり、子プロセスは終了しているものの、親プロセスが「子プロセスは正常に終わったのか?」「エラーで終わったのか?」といった情報をOSから受け取っていない状態が続くため、プロセス情報がOS上に残存し続ける。 ゾンビプロセスは、psコマンドやtopコマンドなどのプロセス監視ツールで確認できる。psコマンドでは、STATカラムに「Z」と表示されるプロセスがゾンビプロセスである。topコマンドでは、Tasks行に「zombie」としてゾンビプロセスの数が表示される。これらのツールを用いてゾンビプロセスを監視し、異常な数のゾンビプロセスが発生していないか定期的に確認することが重要である。 ゾンビプロセスを解消するためには、親プロセスを修正してwait()またはwaitpid()システムコールを適切に呼び出す必要がある。しかし、すでにゾンビプロセスが発生してしまっている場合、親プロセスを再起動することでゾンビプロセスを解消できる場合がある。親プロセスが再起動されると、ゾンビプロセスはOSによって自動的に回収される。ただし、親プロセスが重要な処理を実行している場合は、再起動による影響を十分に考慮する必要がある。 親プロセスを再起動できない場合は、ゾンビプロセスを強制的に終了させることはできない。ゾンビプロセスはすでに実行を終えており、killコマンドなどのシグナルを送っても効果がない。ゾンビプロセスの親プロセスがPID 1(initプロセスまたはsystemd)である場合、initプロセスは通常、子プロセスの終了ステータスを適切に処理するため、ゾンビプロセスが発生することは稀である。しかし、万が一PID 1が親プロセスのゾンビプロセスが発生した場合は、システムの再起動が必要となる場合がある。 ゾンビプロセスの発生を予防するためには、プログラム開発時に親プロセスが子プロセスの終了ステータスを確実に取得するように設計することが重要である。特に、並行処理やマルチプロセス処理を行うプログラムでは、子プロセスの管理を徹底する必要がある。また、プロセス監視ツールを用いてゾンビプロセスの発生状況を定期的に監視し、異常な数のゾンビプロセスが発生している場合は、早急に対処することが重要である。適切なプロセス管理を行うことで、ゾンビプロセスの発生を抑制し、システムの安定稼働を維持することができる。

ゾンビプロセス (ゾンビプロセス) とは | 意味や読み方など丁寧でわかりやすい用語解説