当出现分段错误时停止 Linux Bash 脚本

6

如何在Linux bash脚本中检测程序调用导致分段错误并停止脚本?


我不确定你在问什么,能否重新表述问题并提供一些背景信息? - jeremy
2个回答

9

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

some-crashy-program args || exit 1

如果您想在调用任何程序时出现错误(除了作为if或while语句的一部分),退出脚本,您可以在脚本开头调用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

3

段错误会导致返回代码为139

您可以像这样检查返回代码:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接