我有一个案例,一个python脚本启动了一个子进程,在对父代码进行自我更新时杀死了父进程。
之后,子进程需要再次启动新更新的代码并自行终止。
这一切都解决了,除了我无法在终端内再 CTRL+C 我观察所有这些发生的输出。
例:
python3 main.py
- 这将运行并使用 Popen
subprocess.Popen(['python3', 'autoupdate.py'])
启动子进程 - 自动更新运行并下载最新 main.py
- 自动更新推出新 main.py
subprocess.Popen(['python3', 'main.py'])
- 自动更新过程终止
- 新 main.py 进程运行正常
但是从那里我不能再按 CTRL+C 了。它只是在终端中保持运行和输出
main.py 包括信号处理程序
signal.signal(signal.SIGINT, signal_handler_sigint)
但这仅在自动更新发生之前有效。
终端和新的 main.py 进程似乎以某种方式分离,但输出仍然存在。
您可以
尝试在最近启动的python脚本中打印os.getpid()
,并使用kill -s SIGINT <pid>
向其发送Ctrl-C信号。