我有一个Python脚本,在其中调用了操作系统中的一个耗时进程。经过一段时间后,我调用的进程会被系统通过SIGKILL信号终止。
在Python中是否可能像在try和catch情况下那样处理这个问题?
应该使用哪种方法来解决这个问题。非常重要的是,这个进程尽可能长时间地运行,没有任何中断。
回答是不行,你无法在任何进程中处理SIGKILL
或kill -9 <pid>
。只有SIGHUP
可以被关闭挂钩处理,但不能处理SIGKILL
或-9
。 SIGKILL
用于强制杀死任务,并且仅在内核级别下工作;您的进程不知道它被杀死了。
为了保持长时间运行的进程,您应编写一个小型监视程序,不断检查进程是否仍在运行;如果发现进程已被杀死,则重新启动该进程。
或者
在下面的循环中运行您的进程,希望您明白 :)
while true
do
/your/script
sleep 1
done
-9
和-15
表示kill
命令;在系统调用接口中,信号编号是小且为正数。 - Jonathan Lefflerbash launcher.sh
的命令运行它(假设你将其保存为“launcher.sh”)。此外,/your/script
这一行假定你的Python程序在名为“script”的文件夹中的“/your”文件夹中,已设置可执行位(参见man chmod
),并且以#!/bin/bash
开头。或者,你可以将/your/script/
替换为类似于python /your/script.py
的内容。当然,所有这些都适用于Linux。 - drevicko