我想知道是否有办法从OOM杀手那里抓住sigkill。 我有一个任务队列,而且每创build一个这个被OOM杀死的巨大任务。 这个:
catch Exception as ex: # clean up!
不起作用,因为SIGKILL不能被捕获。 所以……..是否有任何策略在SIGKILL之后清理? 我可以分叉,并观看subprocess? 如果是这样,那么由父母开放的任何资源必须事先由父母知道? 或者我可以只做一些版本
ps -ef | grep <child pid> | xargs kill -9 (you get the idea...)
目前,如果我在OOM杀死后没有清理干净,我会留下大量的subprocess和其他事情,这些只会在任务重试时变得更糟,并且很快就会导致服务器无法访问。
最后,这样做就足够了:
kill -9 <process id>
testing这个确切的情况?
非常感谢!
SIGKILL本身不能被困住。
见http://en.wikipedia.org/wiki/Unix_signal#SIGKILL :
SIGKILL
SIGKILL信号被发送到一个进程,使其立即终止(kill)。 与SIGTERM和SIGINT相反,该信号不能被捕获或忽略,接收过程在接收到该信号时不能进行清理。
要做的最好的事情是下一次你的流程启动,寻找任何需要清理的东西。
是的, kill -9 <pid>
会向进程发送一个SIGKILL。 (准确地说,它发送第9个信号 – 只是SIGKILL在几乎所有的系统上都有9号码,你也可以写kill -KILL <pid>
,让你用名字而不是数字来指定信号一个便携的方式。)
Linux OOM杀手通过发送SIGKILL工作。
杀死选定的进程,OOM杀手提供一个SIGKILL信号。
杀-9 < – 工程