检测进程退出或由于内存不足而被杀死的时间

我的bash脚本在后台运行一些程序,并用wait命令等待它停止。 但是后台进程很可能会因为占用太多内存而被杀死。 我希望我的脚本能够以不同的方式作出不同的反应,而这个过程最终会轻轻地结束,一个死亡的过程。 我如何检查这种情况?

确保你的命令成功(退出码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 

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

你尝试过什么吗?

顺便说一下一些信号不能被处理,比如分段错误SIGSEGV

更简单的解决方案是

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