Python3.7 子进程输出到终端,但不接收 SIGINT



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

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

这一切都解决了,除了我无法在终端内再 CTRL+C 我观察所有这些发生的输出。

例:

python3 main.py
  1. 这将运行并使用 Popen subprocess.Popen(['python3', 'autoupdate.py'])启动子进程
  2. 自动更新运行并下载最新 main.py
  3. 自动更新推出新 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脚本中打印os.getpid(),并使用kill -s SIGINT <pid>向其发送Ctrl-C信号。

最新更新