我有一个我没写过的节目;我们公司的另一个部门做了。假设可执行文件名为Snafu。我需要能够在无人看管的情况下运行它并检测它是否崩溃。这可能在发射后1毫秒或发射后1小时发生。该程序是一个黑盒子,它不会告诉我或给我一个暗示它已经崩溃的提示。我也没有PID。除了点击ps的输出(让我说我想一次运行几个Snafu实例),我如何检测一个Snafu实例的崩溃?我将从BASH脚本启动它。
答案 0 :(得分:0)
这很大程度上取决于它是如何崩溃的。
从完整的黑盒方法出发,您永远不会知道应用程序何时崩溃,因此无法对其做出反应。
对于其余部分,我将假设snafu
退出。
或多或少,传统的做法是:
#!/bin/bash
snafu 1 &
snaf1=$!
snafu 2 &
snaf2=$!
while : ; do
sleep 1
if [ ps $snaf1 ] ; then
echo "snafu 1 still runs"
else
echo "snafu 1 died "
snafu 1 &
snafu1=$!
fi
#same if for snafu 2
done
请参阅LuisMuñoz关于使用PID,ps等的评论;但仍然有很多人这样做。另外:如果从shell脚本启动snafu
,您将拥有其PID。
另一种方法是:
#!/bin/bash
set -o monitor
trap what_when_died SIGCHLD
what_when_died(){
#actions to do when a snafu dies
}
snafu 1 &
snafu 2 &
sleep inf
您需要考虑一些行为方面; set -o monitor
将使shell将SIGINT传递给子节点而不是对它做出反应等。