在Linux下运行的程序可能会因为多种原因而终止:程序可能会完成所需的计算并直接退出(正常退出),代码可能会检测到某些问题并抛出异常(提前退出),最后,系统可能会停止执行,因为程序试图做一些不应该做的事情(例如,访问受保护的内存)(崩溃)。
是否有一种可靠且一致的方法可以区分正常/早退和崩溃?也就是说,
% any_program
...time passes and prompt re-appears...
% (type something here that tells me if the program crashed)
例如,$?
的值是否表示崩溃与程序控制终止?
答案 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而不是实际崩溃来杀死程序。