为什么没有僵尸进程?(原创)

我的试验环境:Debian 5.0, Linux Kernel 2.6.30

 

试验代码:

import time
import os, sys


def handleChild(chNum):
  time.sleep(20)
  print "Hi, I'm child ", chNum
  os._exit(0)


if __name__ == '__main__':
  for i in range(5):
    childPid = os.fork()
    if childPid == 0:
      handleChild(i)
    else:
      print "Hi, I'm father, fork ", i

  time.sleep(40)

我用ps -ef反复观察,在子进程们自己exit之后,就纷纷消失,没有出现在进程列表里

并且,在子进程消失之前,直接kill 子进程号,也可以令其消失

 

为什么没有看到僵尸进程呢?

这让我一直不理解,其实以前我就不理解为什么写内核的大佬们,为什么不解决掉僵尸进程这个大麻烦,要我们double-fork,或者wait来自己玩

是不是现在已经解决这个Bug了?

 

PS: 今天又试了一下,发现os._exit(0)和sys.exit(0)都会造成僵尸进程。上次的实验真是见鬼了。结贴!

posted @ 2010-06-28 08:24  毛豆子  阅读(443)  评论(0编辑  收藏  举报