Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 以编程方式检测MacOS上的程序崩溃?_Bash_Macos_Crash_Operating System_Fault - Fatal编程技术网

Bash 以编程方式检测MacOS上的程序崩溃?

Bash 以编程方式检测MacOS上的程序崩溃?,bash,macos,crash,operating-system,fault,Bash,Macos,Crash,Operating System,Fault,我有一个我没有写的程序;我们公司的另一个部门做了。假设可执行文件名为Snafu。我需要能够在无人值守的情况下运行它,并检测它是否崩溃。这可能发生在发射后1毫秒或发射后1小时。这个程序是一个黑匣子,它不会告诉我或者给我一个它崩溃的暗示。我也没有它的PID。除了将ps的输出变大(假设我想同时运行几个Snafu实例),我如何检测一个Snafu实例的崩溃?我将从BASH脚本启动它。这在很大程度上取决于它是如何崩溃的 它会停下来吗 它能挂起来吗 它会变成垃圾吗 等等 从完全的黑盒方法来看,您永远不会知

我有一个我没有写的程序;我们公司的另一个部门做了。假设可执行文件名为Snafu。我需要能够在无人值守的情况下运行它,并检测它是否崩溃。这可能发生在发射后1毫秒或发射后1小时。这个程序是一个黑匣子,它不会告诉我或者给我一个它崩溃的暗示。我也没有它的PID。除了将ps的输出变大(假设我想同时运行几个Snafu实例),我如何检测一个Snafu实例的崩溃?我将从BASH脚本启动它。

这在很大程度上取决于它是如何崩溃的

  • 它会停下来吗
  • 它能挂起来吗
  • 它会变成垃圾吗
  • 等等
从完全的黑盒方法来看,您永远不会知道应用程序何时崩溃,因此不可能对其做出反应

对于其余部分,我将假设
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
参见Luis Muñ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

有一些行为方面你需要考虑;代码>设置-o监视器将使外壳向孩子们传递信号,而不是对其作出反应等。

这个问题有一个很好的答案哦。。解决停止问题?这个问题没有提到无限循环,所以我不认为它们会被停止问题绊倒。检测崩溃似乎是一件非常合理和可行的事情。我尝试了陷阱方法。因为某种原因,这不起作用。我正在测试的程序启动了另一个程序。