如何在Python中处理os.system SIGKILL信号?

19

我有一个Python脚本,在其中调用了操作系统中的一个耗时进程。经过一段时间后,我调用的进程会被系统通过SIGKILL信号终止。

在Python中是否可能像在try和catch情况下那样处理这个问题?

应该使用哪种方法来解决这个问题。非常重要的是,这个进程尽可能长时间地运行,没有任何中断。

2个回答

30

15
答案是:

回答是不行,你无法在任何进程中处理SIGKILLkill -9 <pid>。只有SIGHUP可以被关闭挂钩处理,但不能处理SIGKILL-9SIGKILL用于强制杀死任务,并且仅在内核级别下工作;您的进程不知道它被杀死了。

为了保持长时间运行的进程,您应编写一个小型监视程序,不断检查进程是否仍在运行;如果发现进程已被杀死,则重新启动该进程。

或者

在下面的循环中运行您的进程,希望您明白 :)

while true
   do
    /your/script
   sleep 1
done

1
请注意,信号编号15通常是SIGTERM,而SIGHUP通常是信号编号1。-9-15表示kill命令;在系统调用接口中,信号编号是小且为正数。 - Jonathan Leffler
1
注意,上面的脚本是一个Shell脚本,可以使用类似于bash launcher.sh的命令运行它(假设你将其保存为“launcher.sh”)。此外,/your/script这一行假定你的Python程序在名为“script”的文件夹中的“/your”文件夹中,已设置可执行位(参见man chmod),并且以#!/bin/bash开头。或者,你可以将/your/script/替换为类似于python /your/script.py的内容。当然,所有这些都适用于Linux。 - drevicko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接