gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:17:05 24 4
gpt4 key购买 nike

在我的(非常简化的)场景中,在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com