2

以下のプログラムはどのように動作し、Linux で Zombie プロセスを作成しますか?

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main ()
{
  pid_t child_pid;

  child_pid = fork ();
  if (child_pid > 0) {
    sleep (60);
  }
  else {
    exit (0);
  }
  return 0;
}
4

2 に答える 2

8

子を作成し、それらを (wait* システム コールの 1 つを使用して) 待機しません。ゾンビとは、親がまだ待っていない子のことです。カーネルは、親に返せるようにするために、主に終了ステータスなどの情報を保持する必要があります。

于 2011-08-11T11:51:07.337 に答える
1

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

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

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

root は kill -9 を使用してプロセス リストからゾンビを削除できるはずです。経験の浅いプログラマーsetsid()は .

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

init によって収集された終了ステータスは、カーネルがプログラムを途中で終了したときに syslog に送信されます。その終了ステータスは、早期終了の原因となったバグの性質を識別するために使用されます (エラー状態がプログラマによって処理されない)。

この方法で報告された終了ステータスは、コードのデバッグに一般的に使用される syslog または klog ファイルの一部になります。

于 2012-05-24T20:39:03.397 に答える