python3 主进程退出时结束所有子进程

286 阅读1分钟

需要用到库:psutil

import psutil

backup_exit = sys.exit  # 备份原始 exit 函数


def custom_exit(status):
    current_pid = psutil.Process().pid  # 获取当前进程的pid
    child_processes = psutil.Process(current_pid).children()  # 获取当前进程的所有子进程
    for child in child_processes:
        child.kill()
        print(f'子进程:{child.pid} 已清理')

    print('程序退出,', status)
    backup_exit(status)


sys.exit = custom_exit  # 替换 sys exit 函数

个人在pycharm中开发时,程序运行在控制台的时候,如果开了子进程,pycharm会一直等待子进程结束了才能 关闭/重启 控制台,非常的不方便。

测试了一下发现pycharm中调用的是 sys.exit 函数,直接hook替换掉这个函数,也就变相的实现了退出检测。

用这个方法是我没找到合适的退出监听的事件,各种不好用。。。。

如果需要监听自定义函数,建议弄个全局 list,里面放函数,退出时依次执行。