如何使用等效的 Ctrl+C 中断 Python 后台守护进程(强制 KeyboardInterrupt 异常)
How to interrupt Python background daemon with Ctrl+C equivalent (forcing KeyboardInterrupt exception)
我有一个 Python 守护程序,它在另一个软件的执行过程中监视机器性能。它基本上使用 ps
检索目标进程的数据,并将其写入 CSV 文件以在守护进程停止时绘制。
如果守护进程 运行在终端中作为前台进程运行,用户可以使用 Ctrl+C[=27 停止它=],什么会强制出现 KeyboardInterrupt
异常。然后我捕获该异常并绘制 CSV 的内容。
当我必须使用 nohup myDaemon.py &
在后台进程中启动守护程序时,问题就来了。它工作正常,因为它生成 CSV,但由于我不能强制 KeyboardInterrupt
异常,如果我使用 Ctrl[= 以外的其他方法终止或停止后台进程,CSV 不会自动绘制27=]+C.
我想避免的是必须将绘图部分移动到一个单独的脚本中,然后 运行 在停止守护程序后手动将其移动。
阅读 kill
手册页找到答案。原来信号-2(SIGINT)相当于Ctrl+C。对其进行了测试 运行 kill -2 <Background_Daemon_PID>
并且工作正常。
我有一个 Python 守护程序,它在另一个软件的执行过程中监视机器性能。它基本上使用 ps
检索目标进程的数据,并将其写入 CSV 文件以在守护进程停止时绘制。
如果守护进程 运行在终端中作为前台进程运行,用户可以使用 Ctrl+C[=27 停止它=],什么会强制出现 KeyboardInterrupt
异常。然后我捕获该异常并绘制 CSV 的内容。
当我必须使用 nohup myDaemon.py &
在后台进程中启动守护程序时,问题就来了。它工作正常,因为它生成 CSV,但由于我不能强制 KeyboardInterrupt
异常,如果我使用 Ctrl[= 以外的其他方法终止或停止后台进程,CSV 不会自动绘制27=]+C.
我想避免的是必须将绘图部分移动到一个单独的脚本中,然后 运行 在停止守护程序后手动将其移动。
阅读 kill
手册页找到答案。原来信号-2(SIGINT)相当于Ctrl+C。对其进行了测试 运行 kill -2 <Background_Daemon_PID>
并且工作正常。