python sigkill 捕获策略
python sigkill catching strategies
我想知道是否有任何方法可以从 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>
测试这个确切的情况?
非常感谢!
Linux OOM 杀手通过发送 SIGKILL 来工作。
为了终止选定的进程,OOM 终止程序会发出一个 SIGKILL 信号。
kill -9 <-- 有效
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>
,这样你就可以通过名称而不是数字来指定信号便携方式。)
我想知道是否有任何方法可以从 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>
测试这个确切的情况?
非常感谢!
Linux OOM 杀手通过发送 SIGKILL 来工作。
为了终止选定的进程,OOM 终止程序会发出一个 SIGKILL 信号。
kill -9 <-- 有效
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>
,这样你就可以通过名称而不是数字来指定信号便携方式。)