如果调用程序导致 linux bash 脚本中的分段错误,如何注意可能会停止脚本呢?
问问题
6887 次
2 回答
8
如果程序以分段错误或任何其他错误退出,它将以非零退出代码退出。您可以测试此退出代码,并在执行此操作时退出您的脚本。如果您想停止任何错误(不仅仅是分段错误),您可以使用:
some-crashy-program args || exit 1
如果你想在你调用的任何程序返回错误时退出你的脚本(除了作为if
orwhile
语句的一部分),你可以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 回答