在Linux中检测程序控制的终止与崩溃

时间:2013-01-26 15:07:51

标签: linux crash

在Linux下运行的程序可能会因为多种原因而终止:程序可能会完成所需的计算并直接退出(正常退出),代码可能会检测到某些问题并抛出异常(提前退出),最后,系统可能会停止执行,因为程序试图做一些不应该做的事情(例如,访问受保护的内存)(崩溃)。

是否有一种可靠且一致的方法可以区分正常/早退和崩溃?也就是说,

% any_program
...time passes and prompt re-appears...
% (type something here that tells me if the program crashed)

例如,$?的值是否表示崩溃与程序控制终止?

1 个答案:

答案 0 :(得分:2)

bash手册页指出:

 The  return  value  of a simple command is its exit status, or 128+n if
 the command is terminated by signal n.

您可以通过查看$?来检查指示崩溃的各种信号,例如SIGSEGV(11)和SIGABRT(6)。分别为139或134:

$ any_program
$ if [ $? = 139 -o $? = 134 ]; then
>   echo "Crashed!"
> fi

至少,如果$?大于128,它表示发生了异常,虽然可能是用户通过按ctrl-c而不是实际崩溃来杀死程序。