6

如果调用程序导致 linux bash 脚本中的分段错误,如何注意可能会停止脚本呢?

4

2 回答 2

8

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

some-crashy-program args || exit 1

如果你想在你调用的任何程序返回错误时退出你的脚本(除了作为iforwhile语句的一部分),你可以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
于 2012-11-19T22:51:43.987 回答
3

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

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

run_your_thing
if [[ $? -eq 139 ]]; then echo "oops, sigsegv"; fi
于 2012-11-19T23:01:01.800 回答