如何杀掉僵尸进程?

发布时间 2023-04-24 21:14:41作者: 弹弹大魔王

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'

kill -HUP 12334 -->(pid)

top -->(其中zombie是僵尸进程,直接kill -9 父进程)

点击查看代码
"""
python对僵尸进程三个解决方法
"""
import os, sys
from time import sleep
import signal


# os.wait()阻塞等待处理
def zombie1():
    pid = os.fork()
    if pid < 0:
        print("Create process failed")
    elif pid == 0:
        print("Child pid:", os.getpid())
        sys.exit("Child exit")
    else:
        """os.wait()"""
        cpid, status = os.wait()
        print("pid:", cpid)
        print("status:", status)
        while True:
            pass


# 创建二级子进程,一级子进程退出,让二级子进程交由系统管理,从而达到处理僵尸进程的目的
def zombie2():
    pid = os.fork()
    if pid < 0:
        print("Create process failed")
    elif pid == 0:
        childpid = os.fork()
        if childpid < 0:
            pass
        elif childpid == 0:
            for i in range(3):
                sleep(1)
                print("two")
        else:
            print("pid:", os.getpid())
            sys.exit("one process exit")
    else:
        onepid, status = os.wait()
        print("one process kill")
        for i in range(3):
            sleep(1)
            print("parent")


# signal子进程退出程序时会发送信号给父进程,如果父进程忽略该信号,则系统会处理子进程退出
def zombie3():
    signal.signal(signal.SIGCHLD, signal.SIG_IGN)
    pid = os.fork()
    if pid < 0:
        print("failed")
    elif pid == 0:
        print("create success:", os.getpid())
        sys.exit("child exit")
    else:
        print("old process")
        while True:
            pass


zombie3()

收藏于:https://blog.csdn.net/qq_43513797/article/details/123790575