关于处理多进程的僵尸进程的问题

2020-02-01  本文已影响0人  hock_

    在使用多进程的过程中,当子进程结束后,如果主进程不对子进程进行回收处理

子进程就会称为僵尸进程,当产生大量的僵尸进程的时候,就会占用计算机大量的资源

这时候就需要对僵尸进程进行处理:

处理方式:

    1:

        pid,status = os.wait()

        功能:再父进程中阻塞等待处理子进程退出

        返回值:pid退出的子进程的pid号

                status 获取子进程退出状态

        是一个阻塞函数,必须等子进程运行完后再运行父进程

2:

        pid,status = os.waitpid(pid,option)

        功能:再父进程中阻塞等待处理子进程退出

        参数: pid -1表示等待任意子进程退出

                  >0 表示等待对应PID号的子进程退出

              option  0 表示阻塞等待

                      WNOHANG 表示非阻塞

3:

让父进程先退出

        1、父进程创建子进程等待子进程退出

        2、子进程创建二级进程后立即退出

        3、二级子进程成为孤儿,和原来的父进程各自执行事件

4:

    最方便的最简洁的一种方法:

            使用不同之间的进程通信函数:

                    异步信号通信:

                                 signal.signal(signal.SIGCHLD,signal.SIG_IGN)

                                  对接收到的信号进行处理:SIGCHLD表示子进程状态改变对父进程发出的信号,SIG_IGN 表示对接收到的信号进行忽略

                   在该状态下,调用的子进程将不会产生僵尸进程,子进程会被丢弃

                    被系统自动回收就不会产生僵尸进程                 

上一篇下一篇

猜你喜欢

热点阅读