2015-10-20 37 views
4

我有一个python脚本,我从操作系统调用冗长的进程。一段时间后,我调用的进程被SIGKILL信号系统终止。如何处理python中的os.system sigkill信号?

是否有可能从Python内部处理这种情况,就像在try和catch情况下一样?

我应该用什么方法来解决这个问题。这个过程尽可能不间断地运行是非常重要的。

回答

7

答案是NO,在任何过程中您都无法处理SIGKILLkill -9 <pid>。只有SIGHUP可以通过shutdownhooks处理,但不能使用SIGKILL或。 SIGKILL是为了攻击性的杀死任务而制作的,只适用于内核级别;你的过程不知道杀人事件。

为了保持长时间运行的过程,您应该编写一个小的监控程序,不断检查进程是否存在;如果发现它被杀死,只需重新启动该过程。

OR

在下面循环运行的过程中,希望你得到它;)

while true 
    do 
    /your/script 
    sleep 1 
done 
+0

请注意,信号15号通常为SIGTERM和SIGHUP是正常的信号编号1' - ''kill'命令使用9'和'-15'符号;在系统调用接口中,信号数量很小且为正值。 –

+0

请注意,上面的脚本是一个shell脚本,运行它像'bash launcher.sh'(假设你保存为“launcher.sh”)。另外,'/ your/script'这一行假定你的python程序在文件夹“/ your”中的一个名为“script”的文件中,设置了可执行位(参见'man chmod'),并以'#! /斌/ bash'。或者用'python/your/script.py'替换'/ your/script /'。当然,所有这些工作在Linux上。 – drevicko