python-sigkill捕获策略

python-sigkill捕获策略,python,linux,memory,sigkill,Python,Linux,Memory,Sigkill,我想知道有没有办法抓住凶手的凶器。我有一个任务队列,每隔一段时间就会创建一个庞大的任务,并被OOM杀死。这: catch Exception as ex: # clean up! 不起作用,因为SIGKILL不会被抓到。那么……有没有什么策略可以在SIGKILL之后进行清理?我能用叉子叉一下,看看孩子的过程吗?如果是这样,父进程必须提前知道子进程打开的任何资源?或者我可以做一些版本的 ps -ef | grep <child pid> | xargs kill -9 (y

我想知道有没有办法抓住凶手的凶器。我有一个任务队列,每隔一段时间就会创建一个庞大的任务,并被OOM杀死。这:

catch Exception as ex:
    # clean up!
不起作用,因为SIGKILL不会被抓到。那么……有没有什么策略可以在SIGKILL之后进行清理?我能用叉子叉一下,看看孩子的过程吗?如果是这样,父进程必须提前知道子进程打开的任何资源?或者我可以做一些版本的

ps -ef | grep <child pid> | xargs kill -9  (you get the idea...)
ps-ef | grep | xargs kill-9(你明白了吧…)
目前,如果我在OOM终止后不清理,我会留下大量的子进程和其他东西,这些东西在重试任务时会使情况变得更糟,很快,服务器就无法访问

最后,仅仅做以下事情就够了吗:

kill -9 <process id> 
kill-9
要测试这个确切的情况


非常感谢

Linux OOM killer通过发送SIGKILL来工作

要终止所选进程,OOM killer将发送SIGKILL信号


kill-9SIGKILL的本质是不能被捕获的

见:

西格基尔

SIGKILL信号被发送到进程以使其终止 立即(杀死)。与SIGTERM和SIGINT相反,此信号不能 被捕获或忽略,并且接收进程无法执行任何 收到此信号后进行清理

最好的做法是在下次启动流程时,查找需要清理的内容


是的,
kill-9
将向进程发送SIGKILL。(准确地说,它发送第9个信号——恰好SIGKILL在几乎每个系统上都有数字9。您可以选择编写
kill-kill
,这样您就可以通过名称而不是数字以便携方式指定信号。)

关于如何清理,是否有最佳实践或传统智慧?如果我有10个东西打开一个子进程…我应该寻找父id==1的进程,并强制杀死它们吗?我有点惊讶没有一个通用的方法来实现这一点…但我想如果这是(应该是)一件非常不寻常的事情,每个人都有自己的想法?如果你有一堆子流程,他们必须有一些机制来监控其他流程,如果它们被杀死。FWIW,我使用优秀的psutil库来完成这项工作—在下一次运行流程时进行清理,搜索ppid为1的预期流程名称,该名称由流程用户拥有。