检测进程何时退出或因内存不足而被终止

时间:2013-07-23 00:56:14

标签: linux bash

我的bash脚本在后台运行一些程序,并且wait命令等待它停止。但很有可能后台进程被杀死,因为它占用了太多内存。我希望我的脚本能够以不同的方式对一个过程进行轻微的反应和一个被杀死的过程。我如何检查这种情况?

3 个答案:

答案 0 :(得分:6)

确保命令在成功时表示成功(退出代码为0),在失败时表示失败(非零)。

当OOM杀手用SIGKILL杀死进程时,信令失败是自动的。 (shell会将信号终止进程的退出代码视为128 +信号编号,因此对于SIGKILL,128 + 9 = 137)。

然后使用wait somepid退出的事实与if语句中等待的命令相同的代码:

yourcommand &
pid=$!
....
if wait $pid
then
    echo "It exited successfully"
else
    echo "It exited with failure"
fi

答案 1 :(得分:1)

通常他们会关闭一个信号,尝试使用一些信号处理函数来处理不可预测的关机,或者最坏的情况是有另一个监控过程,比如任务管理器。

你试过什么吗?

顺便说一些信号无法处理,如分段错误, SIGSEGV

答案 2 :(得分:0)

更简单的解决方案是

yourcommand

if [ $? -eq 0 ] ; then
    echo "It exited successfully"
else
    echo "It exited with failure, exitcode $?"
fi