【发布时间】:2020-03-18 17:42:22
【问题描述】:
我有一个 python 程序,它在子进程中运行另一个 python 脚本(是的,我知道这种架构并不理想,但项目的性质使它成为必要)。我正在尝试:
1.向 python 子进程发送信号(模拟键盘击杀)
2。在子进程中捕获信号并在退出前执行一些清理
代码遵循以下一般模式:
A.py
import signal
import subprocess
import time
proc = subprocess.Popen('python B.py', shell=True)
time.sleep(1)
proc.send_signal(signal.SIGINT)
B.py
try:
while True:
# some application logic
pass
except:
# some cleanup logic
print('bye')
但是当我运行 A.py 时,B.py 从来没有收到信号或者它是清理逻辑。知道这里发生了什么吗?
【问题讨论】:
-
不,这个问题似乎与强制杀戮有关(信号 9)。我需要发送信号 2 并在子进程中捕获它
-
shell=True表示chilld 进程是一个shell,而python 是孙子进程。 bugs.python.org/issue4855
标签: python linux subprocess