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

Ali*_*Ali 4 linux shell segmentation-fault

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

Bri*_*ell 7

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

some-crashy-program args || exit 1
Run Code Online (Sandbox Code Playgroud)

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

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

$ kill -l SEGV
11
Run Code Online (Sandbox Code Playgroud)

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

some-crashy-program args
if [ $? -eq 139 ]; then
    echo "It crashed!"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)