最新消息:yaf表单扩展中新增加了浮点数、日期和集合的校验。php yaf框架扩展实践三——表单

linux僵尸进程的理解和产生僵尸进程模拟

Linux 4267浏览 0评论

僵尸进程,英文名zombie process,顾名思义就是死掉的进程。那么僵尸进程究竟是什么产生的呢?笔者尝试自己编写代码实现僵尸进程的产生,以便理解其中原因,在以后的编程中,也可以避免这个问题。

僵尸进程产生的原因就是父进程产生子进程后,子进程先于父进程退出,但是父进程由于种种原因,并没有处理子进程发送的退出信号,那么这个子进程就会成为僵尸进程。

以下是用python编写的一个产生僵尸进程的程序

#!/usr/bin/env python
#coding=utf8

import os, sys, time
#产生子进程
pid = os.fork()

if pid == 0:
    #子进程退出
    sys.exit(0)
#父进程休息30秒
time.sleep(30)

上面的例子非常简单,就是先产生一个子进程,子进程退出,父进程休息30秒。运行这个程序,通过ps查看进程:

$ ps -A l | grep 'python'
僵尸进程的产生

僵尸进程的产生

第二行就是产生的子进程,可以很明显的看到是僵尸进程了。笔者尝试使用kill杀死这个进程,但是并没有效果。只能通过杀死父进程或者等待父进程休息结束退出来清除僵尸进程。

避免僵尸进程的产生

在父进程上加上wait方法,就是告诉父进程要等待子进程的结束,子进程结束时要处理子进程的数据。

#父进程启动wait方法
if pid > 0:
    os.wait()

结合上例,只要放在产生子进程的后面就OK了。

产生僵尸进程是由于子进程先退出,那么如果是父进程先退出,会发生什么情况呢?子进程会被init这个进程接管,执行结束后,会被自动回收。

转载请注明:快乐编程 » linux僵尸进程的理解和产生僵尸进程模拟

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址