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来销毁。
    举例
  • 相关阅读:
    HTML 简介
    Composer 安装与使用
    给手绘图着色(添加颜色或色彩):CVPR2020论文点评
    图像分类:CVPR2020论文解读
    CVPR2020论文解读:OCR场景文本识别
    CVPR2020论文解读:手绘草图卷积网络语义分割
    汽车芯片综述
    CVPR2020论文解析:视觉算法加速
    CVPR2020无人驾驶论文摘要
    CVPR2020论文解析:视频语义检索
  • 原文地址:https://www.cnblogs.com/zhouhao123/p/11235537.html
Copyright © 2011-2022 走看看