2011-08-11 11 views

答えて

8

子を作成し、待機しません(wait *システムコールの1つ)。そして、ゾンビはただのものです:両親がまだ待っていない子供たち。カーネルは、親に返すことができるように、いくつかの情報(主に終了ステータス)を維持しなければなりません。

+0

将来のゾンビが待っている間に、親は死ぬ。 :) – Rolice

+0

@Ricice、Cicidaと同じこと:眠っている親(forkの結果として子のpidを取得する親)であり、子(forkの結果として0を返す)がすぐに戻る。 (また、待機システムコールが紛失している状況で、スリーププロセスのために待機することは混乱する可能性があります)。 – AProgrammer

+0

その後、ゾンビと孤児の違いは何ですか?混乱しました... – anishsane

1

setsid()コマンドがありません。

すべての* nixプロセスは、終了する必要のある終了ステータスを生成します。これは、子プロセスが最初に終了することになっている場合、wait()ステートメントを使用して親プロセスによって取得されることになっています。

setsid()コマンドは、子プロセスの前に親プロセスが終了すると、親プロセスをinitに切り替えます。

rootは、kill -9を使用してゾンビをプロセスリストから削除できる必要があります。経験の浅いプログラマは、setsid()を省略することもあり、そうしなければディスクドライブを詰まらせるエラーを引き起こすバグは隠されます。

古くから、システム管理者はゾンビを使用して、優れたコードを作成するために追加のトレーニングが必要な経験の浅いプログラマーを特定します。

カーネルがプログラムを途中で終了すると、initによって取得された終了ステータスがsyslogに送信されます。終了ステータスは、早期終了を引き起こしたバグの性質を特定するために使用されます(エラー条件はプログラマによって処理されません)。

このように報告された終了状況は、コードをデバッグするためによく使用されるsyslogまたはklogファイルの一部になります。

関連する問題