3

さて、私は奇妙な問題を抱えています。プロジェクトでゾンビプロセスを作成できませんが、他のファイルで作成できます。簡単な手順があります:

int main()
{
    if(fork()==0)
        printf("Some instructions\n");
    else
    {
        sleep(10);
        wait(0);
    }
    return 0;
}

その単純なコードは、10秒間ゾンビプロセスを作成します。私がチェックしていますが、実際に存在しています。

しかし、このコードを自分のプログラム(自分のシェル)にコピーすると、ゾンビプロセスの前と同じように実行されるすべてのものがまったく存在しなくなります。何が違うのかわかりません。同じコードです。

それについて知っておくべき情報は他にありますか?簡単な方法でゾンビを作成する他の方法はありますか?

4

1 に答える 1

3

この python スクリプトを試してください:

#!/usr/bin/python
# -*- coding: utf8 -*-

import subprocess
import time
import threading

# Create 100 subprocesses 

proc = {}
for i in xrange(0,1000):
        proc[i] = subprocess.Popen(['ls','-l'])

# create zombies from this processes, observe one minute zombies
time.sleep(60)

# Zombies dead
proc.communicate()

time.sleep(5)

その後、ゾンビをチェックします。

# ps -A | grep defunc
14711 pts/49   00:00:00 ls <defunct>
14713 pts/49   00:00:00 ls <defunct>
14716 pts/49   00:00:00 ls <defunct>
.... 
14740 pts/49   00:00:00 ls <defunct>
14741 pts/49   00:00:00 ls <defunct>
14742 pts/49   00:00:00 ls <defunct>
14743 pts/49   00:00:00 ls <defunct>
14746 pts/49   00:00:00 ls <defunct>
14749 pts/49   00:00:00 ls <defunct>
....
14805 pts/49   00:00:00 ls <defunct>
14806 pts/49   00:00:00 ls <defunct>

または C:

#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;
}

透き通った純粋なハイチのブードゥーのように、魅力のように機能するはずです。

于 2013-07-10T18:24:53.970 に答える