python sigkill 捕捉策略

标签 python linux memory sigkill

我想知道是否有任何方法可以从 OOM killer 那里捕捉到 sigkill。我有一个任务队列,并且每隔一段时间就会创建一个被 OOM 杀死的庞大任务。这个:

catch Exception as ex:
    # clean up!

不起作用,因为 SIGKILL 无法被捕获。所以........在 SIGKILL 之后有什么策略可以清理吗?我可以 fork 并观察子进程吗?如果是这样,子进程打开的任何资源都必须由父进程提前知道吗?或者我可以做一些版本的

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

目前,如果我在 OOM 终止后不进行清理,我会留下大量子进程和其他东西,这只会在重试任务时使情况变得更糟,并且很快就会无法访问服务器。

最后,做就够了吗:

kill -9 <process id> 

要测试这个确切的情况?

非常感谢!

最佳答案

SIGKILL 就其本质而言不能被困住。

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

SIGKILL

The SIGKILL signal is sent to a process to cause it to terminate immediately (kill). In contrast to SIGTERM and SIGINT, this signal cannot be caught or ignored, and the receiving process cannot perform any clean-up upon receiving this signal.

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

是的,kill -9 <pid>将向进程发送 SIGKILL。 (准确地说,它发送第 9 个信号 - 恰好 SIGKILL 在几乎每个系统上都有数字 9。您也可以编写 kill -KILL <pid> ,它可以让您以可移植的方式通过名称而不是数字来指定信号.)

关于python sigkill 捕捉策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732683/

相关文章:

linux - 磁盘吞吐量 - 使用 dd 的新文件与现有文件

android - 传递自定义对象或只是 id

python - 如何提高 Python 在大文件上的迭代性能

python - 我需要使用 MatPlotLib 在 PyQt4 GUI 中绘制饼图

python - 在 2 个单独的变量中同时获取 Floor Division 和 Remainder

linux - JSON 转义 CURL/JQ 输出

linux - unix shell 脚本中的段错误(核心转储)错误。帮忙找bug?

python - 如何在 Ubuntu 18.04 上安装 python3.7 并使用 pip 创建 virtualenv?

c# - 固定缓存的哈希表大小

设置 View 标签时Android GRef增加