python - 在 Linux 上使用 Python 从子进程中杀死父进程
问题描述
在我的(非常简化的)场景中,在 python 2.7 中,我有 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()
,但在我的情况下,父进程是执行任务的人,它不应该等待它的子进程。
处理这种情况的最佳方法是什么?
解决方案
您可以使用os.getppid()
来检索父母的 PID,并使用os.kill()
.
例如os.kill(os.getppid(), signal.SIGKILL)
请参阅https://docs.python.org/2/library/os.html和https://docs.python.org/2/library/signal.html#module-signal以供参考。
一个mwo:
家长:
import subprocess32 as subprocess
subprocess.run(['python', 'ch.py'])
孩子:
import os
import signal
os.kill(os.getppid(), signal.SIGTERM)
推荐阅读
- apache-kafka - max.in.flight.requests.per.connection 和 Spring Kafka Producer 使用 KafkaTemplate 同步事件发布
- awk - Grep 在一行中的随机位置获取大于整数的值
- java - 从 java 客户端与 curl -d 发布到 Django 表单
- javascript - javascript 预期表达式,得到关键字'break'
- java - 为什么 Maven 中的动态版本范围不如最初预期的有用?
- python-3.x - 从任意嵌套的 xml 树总和返回结果
- java - 在流中键入擦除
- android - JavaFX 支持 Android 上的 64 位要求
- ionic-framework - 单元测试 - 离子框架中的警报控制器出现问题
- python - 无法对python循环中的变量值求和。修复它的方法是什么?