python - 在 Linux 上使用 Python 从子进程中杀死父进程

标签 python linux python-2.7 multiprocessing fork

在我的(非常简化的)场景中,在 python 2.7 中,我有 2 个进程:

  1. 父进程,执行一些任务。
  2. 子进程,X次后需要杀掉父进程。

创建子进程:

killer = multiprocessing.Process(...)
killer.start()

子进程在X时间后执行如下代码(代码的简化版):

process = psutil.Process(parent_pid)
...
if time_elapsed:
    while True:
        process.kill()
        if not process.is_alive:
            exit()

问题是它让父进程成为僵尸进程,而子进程永远不会退出,因为父进程还活着。

相同的代码在 Windows 中按预期工作。

我看到的所有解决方案都在谈论父进程通过调用 killer.join() 等待子进程完成,但在我的例子中,父进程是执行任务的人,它不应该等待它的 child 。

处理这种情况的最佳方法是什么?

最佳答案

您可以使用 os.getppid() 检索父级的 PID,并使用 os.kill() 杀死它。

例如os.kill(os.getppid(), signal.SIGKILL)

参见 https://docs.python.org/2/library/os.htmlhttps://docs.python.org/2/library/signal.html#module-signal供引用。

一个mwo:

家长:

import subprocess32 as subprocess

subprocess.run(['python', 'ch.py'])

child :

import os
import signal

os.kill(os.getppid(), signal.SIGTERM)

关于python - 在 Linux 上使用 Python 从子进程中杀死父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51305831/

相关文章:

python - 如何获取动态创建的方法的名称

linux - EPT PTE 和主机 PTE 条目之间有什么关系?

linux - 无法从一个 Docker 容器与同一台机器上的暴露容器进行通信

python - 如何比较嵌套的字典

python - 如何在 Outlook 规则中传递参数以运行 Python 脚本?

c - 如何在 linux C 中保持非事件的 TCP 连接?

python - 优化执行时间以检查单词的字符是否在Python列表中

Python 命令行 -x 选项

python - 用两个三角形定义菱形

python - 根据其他列的值为 Pandas Dataframe 创建列