プロセス
1-1990 では認められていなかったが、POSIX.1-2001 で認められるようになった)。ゾンビの使用しているプロセス識別子とプロセステーブルエントリがそれによって再利用可能となる。このような処理を行わなければゾンビプロセスは残存し続ける。例えば、親プロセスが他の子プロセスを生成しようとしていて、ゾンビとなっているプロセスと同じプロセス識別子を割り当てられたくないときなどは、ゾンビプロセスを残す意味があるだろう。
ゾンビプロセスは孤児プロセスと同じではない。孤児プロセスはゾンビ状態にはなっておらず、init プロセスを里親としているので必ず waitが実行される。
ゾンビプロセスは UNIX の ps コマンドの STAT カラムに "Z" と表示されることで識別される。ゾンビプロセスは一般に非常に短期間しか存在しないが、親プロセスのプログラムにバグがあるとずっと残存することがある。メモリリークと同様、ゾンビプロセスが多少存在しても問題はないが、高負荷状態でゾンビが増えるとプロセスを生成できないなどの問題を発生することになる。
ゾンビプロセスを消去するには、まず親プロセスに kill コマンドで SIGCHLD シグナルを送ってみる。これで親プロセスがゾンビを刈り取らないなら、次は親プロセスを終了させる。プロセスは親プロセスが終了すると init が新たな親に設定される。init は定期的に waitシステムコールを実行しているので、全てのゾンビプロセスを刈り取ってくれる。
プロセスは走行中状態でプログラムの実行完了によって終了状態となるか、明示的に終了させられることもある。どちらの場合でもプロセスは終了(terminated)状態になる。プロセスがこの状態になってもメモリから消去されない場合、この状態をゾンビ(zombie)状態とも呼ぶ。
UNIX系オペレーティングシステムにおいて、ゾンビプロセス(Zombie Process)は、処理を完了したがプロセステーブル(プロセス制御ブロック相当)が残っていて、終了ステータスを読まれるのを待っているプロセスである。この用語のメタファーに従えば、ゾンビプロセスは「死んでいる」が、まだ「死神」が到着していないということになる。
プロセスは終了するときに、使用していた全メモリとリソースを解放して他のプロセスが再利用できるようにする。しかし、プロセステーブルのエントリは残される。親プロセスには子プロセスの終了を知らせるために SIGCHLD シグナルが送られる。親プロセスは SIGCHLD シグナルを必ずしも利用する必要はなく、利用するかどうかはプログラミングの都合による。親プロセスが子プロセスをゾンビ・プロセスにせずに「看取る」ためには、子プロセスの終了ステータスを読み取ってゾンビを削除する。一般的にはプログラムの適当な場所で waitpid システムコールを WNOHANG オプションつきで呼び出すか、シグナル・ハンドラで SIGCHLD を捕捉し wait を実行するか、または signal もしくは sigaction システム・コールで SIGCHLD に対して SIG_IGN シグナル・ハンドラを設定する方法が代表的である(SIGCHLD に対し SIG_IGN を設定する方法は POSIX.
プロセスが最初に作成されると、生成(created)状態あるいは新規(new)状態となる。この状態ではプロセスは走行可能状態にされるのを待つ。この状態遷移をさせるのはスケジューラである。多くのシステムではこの遷移が自動的に(即座に)行われるが、リアルタイムオペレーティングシステムでは遅延が生じることがある。リアルタイムシステムで多くのプロセスを走行可能状態にしてしまうと、過飽和とシステムリソースの競合が発生し、プロセスのリアルタイム性を損なってしまう。