python sigkill捕捉策略

Hoo*_*pes 7 python linux memory sigkill

我想知道是否有办法从OOM杀手那里抓住sigkill.我有一个任务队列,每隔一段时间就会创建一个由OOM杀死的庞大任务.这个:

catch Exception as ex:
    # clean up!
Run Code Online (Sandbox Code Playgroud)

不起作用,因为SIGKILL无法被抓住.所以........在SIGKILL之后有什么策略可以清理吗?我可以分叉,看看孩子的过程吗?如果是这样,子进程打开的任何资源都必须事先由父母知道?或者我可以做一些版本的

ps -ef | grep <child pid> | xargs kill -9  (you get the idea...)
Run Code Online (Sandbox Code Playgroud)

目前,如果我在OOM杀死后没有清理,我会留下大量的子进程和其他事情,这些事情只会在重试任务时变得更糟,很快就会无法访问服务器.

最后,这样做是否足够:

kill -9 <process id> 
Run Code Online (Sandbox Code Playgroud)

测试这种确切的情况?

非常感谢!

小智 14

SIGKILL本质上不能被困.

http://en.wikipedia.org/wiki/Unix_signal#SIGKILL:

SIGKILL

SIGKILL信号被发送到进程以使其立即终止(kill).与SIGTERM和SIGINT相反,此信号无法捕获或忽略,接收过程无法在接收到此信号时执行任何清理.

最好的办法是下次启动流程时,查找需要清理的任何内容.

是的,kill -9 <pid>将SIGKILL发送给流程.(确切地说,它发送第9个信号 - 恰好SIGKILL在每个系统上都有数字9.你可以选择写kill -KILL <pid>,这可以让你通过名称而不是数字以便携方式指定信号.)