【问题标题】:can't create zombie process in linux无法在linux中创建僵尸进程
【发布时间】:2012-11-30 14:52:52
【问题描述】:

我有一个奇怪的问题。 我无法在我的项目中创建僵尸进程,但我可以在其他文件中执行此操作。 有简单的说明:

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

这个简单的代码创建了一个 10 秒的僵尸进程。我正在检查,它确实存在。

但是,如果我将此代码复制到我的程序(我自己的 shell)中,那么像之前一样执行的所有操作,但僵尸进程根本不存在。我不知道有什么区别。这是相同的代码。

我应该知道更多信息吗? 有没有其他简单的方法来创建僵尸?

【问题讨论】:

  • 我很好奇你为什么要创建一个僵尸?
  • 该程序简单明了。当您将此代码复制到其中时,您的较大程序会是什么样子?
  • 你有没有机会在那个更大的项目中有一个 SIGCHLD 处理程序?或以其他方式修改默认的?
  • 这根本没有意义。我认为创建一个流程只是为了让它立即失效。你到底想达到什么目的?
  • 在为 SIGCHLD pubs.opengroup.org/onlinepubs/009695399/functions/… 安装处理程序时忽略 SIGCHLD 信号或设置 SA_NOCLDWAIT 标志不会创建僵尸

标签: c linux bash process zombie-process


【解决方案1】:

试试这个 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;
}

应该像魅力一样工作,像晶莹剔透的纯净Haitian Vodou

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 2021-12-09
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多