僵尸进程处理方案

2020-11-19  本文已影响0人  新月爱文宇

僵尸进程介绍

僵尸进程产生原因

系统为什么需要僵尸进程这种进程状态

由于父进程创建子进程是异步的,双方不知道各自的运行状态,而父进程有的时候需要知道子进程退出时的一些信息,所以 linux提供了一种机制,通过让子进程退出时向父进程发送 SIGCHRD 信号来告知父进程,子进程已经退出了。同时,父进程通过调用 wait 和 waitpid 来获取子进程的退出信息。

僵尸进程的危害

如何防止僵尸进程

参考链接

代理进程退出,变成僵死进程原因

graph LR
A[parent父进程] -->|创建| B(代理进程)

解决代理变成僵尸进程方法

graph LR
A[parent父进程] -->|创建| B(process)
B[process] -->|创建| C(代理进程)

代码

import time
import subprocess
from multiprocessing import Process, Queue


def open_test_server(port, q):
    com = '/Users/job/Venvs/test/bin/python {} {}'.format('/Users/job/my_tests/test_server.py', port)
    try:
        test_process = subprocess.Popen(com.split())
        pid = test_process.pid
    except Exception as e:
        test_process = None
        pid = None
        print(e)
    q.put({'pid': pid})


def main(port):
    q = Queue()
    sub_process = Process(target=open_test_server, args=(port, q))
    sub_process.start()
    sub_process.join()
    info = q.get()
    print(info)


if __name__ == '__main__':
    main(12345)
    while True:
        time.sleep(10)
        print('父进程睡了10秒')
上一篇 下一篇

猜你喜欢

热点阅读