【问题标题】:Python3.7 subprocess outputs to terminal but does not receive SIGINTPython3.7 子进程输出到终端但没有收到 SIGINT
【发布时间】:2019-12-03 13:01:14
【问题描述】:

我有一个案例,python 脚本启动了一个子进程,该子进程在对父代码进行自我更新时杀死了父进程。

之后子进程需要重新启动新更新的代码并自行终止。

除了我不能再在终端中按 CTRL+C 之外,一切都解决了,我观察了所有这些发生的输出。

例子:

python3 main.py
  1. 这会运行并启动一个带有 Popen subprocess.Popen(['python3', 'autoupdate.py']) 的子进程
  2. 自动更新运行并下载最新的 main.py
  3. autoupdate 启动新的 main.py subprocess.Popen(['python3', 'main.py'])
  4. 自动更新过程终止
  5. 新的 main.py 进程运行良好

但是从那里我不能再按CTRL+C了。它只是在终端中继续运行和输出

main.py 包含一个信号处理程序

signal.signal(signal.SIGINT, signal_handler_sigint)

但这仅在自动更新发生之前有效。

终端和新的 main.py 进程似乎以某种方式分离,但输出仍然存在。

【问题讨论】:

    标签: python-3.x subprocess


    【解决方案1】:

    您可以尝试在最近启动的 python 脚本中打印os.getpid() 并使用kill -s SIGINT <pid> 向其发送 Ctrl-C 信号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 2011-06-26
      相关资源
      最近更新 更多