为什么没有僵尸进程?(原创)
我的试验环境: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)都会造成僵尸进程。上次的实验真是见鬼了。结贴!