如何知道正在运行的后台进程是否有问题

时间:2016-08-05 23:47:11

标签: c linux shell core

我有一个从脚本运行的进程myprocess。是否可以检查此过程是成功执行还是崩溃?

这就是我的剧本的样子

myprocess 12 &
sleep 12
# I want to check here if the process crashed

我在后台运行该过程的原因很简单。我想在sleep之前做其他任务。在我醒来之后,我想看看这个过程是否优雅地退出或者是否已经崩溃(倾倒核心)。

PS:如果需要任何其他细节或更多代码,请在下面发表评论。

1 个答案:

答案 0 :(得分:3)

假设你core 已经一个名为$PWD的文件(否则会被删除),这就是 lazy < / strong>这样做的方法:

(请注意 [ lazy 核心文件方法]假设正确的参数化为sysctl fs.suid_dumpable if {{ 1}}将有privilege levels changed or is execute only。另请注意,myprocess设置可能导致核心文件被转储到其他地方,而不是kernel.core_pattern。请参阅this article以便正确感谢@alvits指出这两个潜在的问题。无论如何,我不建议使用以下核心文件方法。)

$PWD

另请注意,只有在没有其他任何内容将核心转储到#!/bin/bash rm -f core ulimit -c unlimited myprocess 12 & # ... Do your stuff ... sleep 12 if [ -f core ]; then echo "This is a minimal example to show that the program dumped core." fi

的情况下,这才有效

更清洁方法:

$PWD

正确方式:

#!/bin/bash

(rm -f /tmp/myprocess.success && myprocess 12 && touch /tmp/myprocess.success) &

# ... Do your stuff ...

sleep 12

if [ -f /tmp/myprocess.success ]; then
    echo "myprocess returned EXIT_SUCCESS. But if it didn't returned before sleep 12 elapsed, this will fail."
fi