python sigkill捕捉策略

时间:2015-06-09 12:57:14

标签: python linux memory sigkill

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

catch Exception as ex:
    # clean up!

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

ps -ef | grep <child pid> | xargs kill -9  (you get the idea...)

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

最后,这样做是否足够:

kill -9 <process id> 

测试这种确切的情况?

非常感谢!

2 个答案:

答案 0 :(得分:11)

SIGKILL本质上是无法被困的。

请参阅http://en.wikipedia.org/wiki/Unix_signal#SIGKILL

  

SIGKILL

     

SIGKILL信号被发送到进程以使其终止   立刻(杀)。与SIGTERM和SIGINT相比,此信号不能   被抓住或被忽略,并且接收过程不能执行任何操作   收到此信号后清理。

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

是的,mysql_query会向进程发送SIGKILL。 (确切地说,它发送第9个信号 - 恰好SIGKILL在每个系统上都有数字9。你可以选择写kill -9 <pid>,它允许你通过名称而不是数字来指定信号。便携式方式。)

答案 1 :(得分:1)

Linux OOM杀手的工作原理是发送SIGKILL。

要杀死所选进程,OOM杀手会发出SIGKILL信号。

kill -9&lt; - Works