如果在linux bash脚本中调用程序导致段错误,可能会引起注意,可能会停止脚本吗?
答案 0 :(得分:7)
如果程序退出时出现分段错误或任何其他错误,它将以非零退出代码退出。您可以测试此退出代码,并在执行此操作时退出脚本。如果您想要停止任何错误(不仅仅是分段错误),您可以使用:
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
答案 1 :(得分:3)
分段错误会导致139
作为返回码。
您可以检查返回代码,如下所示:
run_your_thing
if [[ $? -eq 139 ]]; then echo "oops, sigsegv"; fi