python - 子进程 Popen : signal not propagating

标签 python subprocess signals

执行_sleep.py

import os
import time
import subprocess

sleep_script = 'sleep_forever.py'
child = subprocess.Popen(sleep_script,
                         shell=True,
                         close_fds=True,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.STDOUT,
                        )

subout = child.communicate()[0]
print subout
rc = child.returncode

sleep_forever.py

#!/usr/bin/python
import time

while True:
    time.sleep(1)

当我运行 execute_sleep.py 然后 kill -TERM -- -<pid of execute_sleep.py> 时, execute_sleep.py 终止,但 sleep_forever.py 继续运行。

我该怎么做才能在 execute_sleep.py 收到信号时向下传播到 sleep_forever.py?

这些选项中的任何一个都会阻止信号吗?

  • shell=True
  • close_fds=True
  • 使用subprocess.PIPE

最佳答案

您需要处理信号,否则您将创建孤儿(sleep_script 进程)。因此,当终止父进程的信号被捕获时,它会传播到之前的子进程。

def handler(signum, frame):
    functionToKillSleeper(pidtokill)


signal.signal(signal.SIGTERM, handler)

注意不能捕获SIGKILL。

所以你需要 SIGINT 或 SIGTERM 父进程以便处理信号,否则你的问题将仍然存在。

关于python - 子进程 Popen : signal not propagating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39604228/

相关文章:

c - 在关闭的连接上写入不会立即生成 sigpipe

Java 和 Python - 从子进程启动时 System.console() 返回 null

python - 无法使用子进程运行 shell 命令

c - 如何在信号处理程序中获取执行上下文?

python - 如何求多元多项式方程组的复根 (Python)

python - shell脚本执行失败如何实现重试机制?

c - SIGSTOP 在 c 程序中不起作用

python - 在 numpy 数组中查找相同的行和列

python - 使用ReduceLROnPlateau时获取当前学习率

python - 用 Python 解析直播网站中的台词