1

我的 bash 脚本正在后台运行一些程序,并使用 wait 命令等待它停止。但是后台进程很有可能会因为占用太多内存而被杀死。我希望我的脚本对一个温和地结束的进程和一个被杀死的进程做出不同的反应。如何检查这种情况?

4

3 回答 3

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
于 2013-07-23T02:47:55.357 回答
1

通常他们会用信号关闭,尝试使用一些信号处理程序功能来处理不可预知的关闭,或者在最坏的情况下使用另一个监控进程,例如任务管理器。

你试过什么吗?

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

于 2013-07-23T01:00:30.270 回答
0

更简单的解决方案是

yourcommand

if [ $? -eq 0 ] ; then
    echo "It exited successfully"
else
    echo "It exited with failure, exitcode $?"
fi
于 2016-11-09T20:49:55.473 回答