zoukankan      html  css  js  c++  java
  • 僵尸进程和孤儿进程

    僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程
    孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
    等待父进程正常结束后会调用wait/waitpid去回收僵尸进程
    但如果父进程是一个死循环,永远不会结束,那么该僵尸进程就会一直存在,僵尸进程过多,就是有害的
    解决方法一:杀死父进程
    解决方法二:对开启的子进程应该记得使用join,join会回收僵尸进程
    创建完子进程后,主进程所在的这个脚本就退出了,当父进程先于子进程结束时,子进程会被init收养,成为孤儿进程,而非僵尸进程
    import os
    import sys
    import time
    
    pid = os.getpid()
    ppid = os.getppid()
    print 'im father', 'pid', pid, 'ppid', ppid
    pid = os.fork()
    #执行pid=os.fork()则会生成一个子进程
    #返回值pid有两种值:
    #    如果返回的pid值为0,表示在子进程当中
    #    如果返回的pid值>0,表示在父进程当中
    if pid > 0:
        print 'father died..'
        sys.exit(0)
    
    # 保证主线程退出完毕
    time.sleep(1)
    print 'im child', os.getpid(), os.getppid()
    
    执行文件,输出结果:
    im father pid 32515 ppid 32015
    father died..
    im child 32516 1
    
    子进程已经被pid为1的init进程接收了,所以僵尸进程在这种情况下是不存在的,存在只有孤儿进程而已,孤儿进程声明周期结束自然会被init来销毁。
    举例
  • 相关阅读:
    关于测试准备工作的要求--测试用例
    测试用例设计:PICT的安装及使用
    导师应该做什么
    黑盒测试流程
    工作职责及内容
    自己在项目中写的一个Jquery插件和Jquery tab 功能
    Javascript中的" "
    Jquery.ajax 详细解释 通过Http请求加载远程数据
    Jquery中的toggle()方法
    Umbraco examine search media folder 中的pdf文件
  • 原文地址:https://www.cnblogs.com/zhouhao123/p/11235537.html
Copyright © 2011-2022 走看看