我有一个python脚本,我从操作系统调用冗长的进程。一段时间后,我调用的进程被SIGKILL信号系统终止。如何处理python中的os.system sigkill信号?
是否有可能从Python内部处理这种情况,就像在try和catch情况下一样?
我应该用什么方法来解决这个问题。这个过程尽可能不间断地运行是非常重要的。
我有一个python脚本,我从操作系统调用冗长的进程。一段时间后,我调用的进程被SIGKILL信号系统终止。如何处理python中的os.system sigkill信号?
是否有可能从Python内部处理这种情况,就像在try和catch情况下一样?
我应该用什么方法来解决这个问题。这个过程尽可能不间断地运行是非常重要的。
There is no way to handle SIGKILL
的信号SIGKILL和SIGSTOP不能被捕获,阻止或忽略。
如果你正在寻找优雅地处理系统关闭,你应该处理SIGTERM
或启动/关机脚本,如upstart job或init.d script。
答案是NO,在任何过程中您都无法处理SIGKILL
或kill -9 <pid>
。只有SIGHUP
可以通过shutdownhooks处理,但不能使用SIGKILL
或。 SIGKILL
是为了攻击性的杀死任务而制作的,只适用于内核级别;你的过程不知道杀人事件。
为了保持长时间运行的过程,您应该编写一个小的监控程序,不断检查进程是否存在;如果发现它被杀死,只需重新启动该过程。
OR
在下面循环运行的过程中,希望你得到它;)
while true
do
/your/script
sleep 1
done
请注意,信号15号通常为SIGTERM和SIGHUP是正常的信号编号1' - ''kill'命令使用9'和'-15'符号;在系统调用接口中,信号数量很小且为正值。 –
请注意,上面的脚本是一个shell脚本,运行它像'bash launcher.sh'(假设你保存为“launcher.sh”)。另外,'/ your/script'这一行假定你的python程序在文件夹“/ your”中的一个名为“script”的文件中,设置了可执行位(参见'man chmod'),并以'#! /斌/ bash'。或者用'python/your/script.py'替换'/ your/script /'。当然,所有这些工作在Linux上。 – drevicko