发生分段故障时停止linux bash脚本

时间:2012-11-19 22:08:44

标签: linux shell segmentation-fault

如果在linux bash脚本中调用程序导致段错误,可能会引起注意,可能会停止脚本吗?

2 个答案:

答案 0 :(得分:7)

如果程序退出时出现分段错误或任何其他错误,它将以非零退出代码退出。您可以测试此退出代码,并在执行此操作时退出脚本。如果您想要停止任何错误(不仅仅是分段错误),您可以使用:

some-crashy-program args || exit 1

如果您想要退出脚本,如果您调用的任何程序返回错误(作为ifwhile语句的一部分除外),您可以在脚本开头调用set -e,以便在任何命令失败时立即退出脚本。在需要随时间维护的较大脚本中,有些不鼓励使用此类用法,因为如果grep之类的内容返回非零退出代码,则可能导致脚本在意外时退出,但它可能对快速的一次性脚本,如果你知道你总是想停止错误。

如果您只想在程序崩溃时出现段错误,而不是任何其他错误,则可以检查特定的退出代码。在大多数系统上,SEGV的值为11,但您可以查看:

$ kill -l SEGV
11

然后添加128,这将是您的程序退出的退出代码。测试退出代码,以确定您的程序是否与SIGSEGV崩溃:

some-crashy-program args
if [ $? -eq 139 ]; then
    echo "It crashed!"
    exit 1
fi

答案 1 :(得分:3)

分段错误会导致139作为返回码。

您可以检查返回代码,如下所示:

run_your_thing
if [[ $? -eq 139 ]]; then echo "oops, sigsegv"; fi