围绕抛出分段错误的命令构建一个 while 循环

Pab*_*blo 0 segmentation-fault

我有一个程序会在某些情况下引发分段错误。我想在发生分段错误时执行一个命令来处理数据,然后再次执行该命令,并一直这样做直到分段错误停止。

作为伪代码的粗略尝试,

dodgy_command

while SegFault
         dataProcessing
         dodgy_command
end
Run Code Online (Sandbox Code Playgroud)

我想我需要使用 Trap 命令,但我不了解此命令的语法。

Ste*_*ris 5

当程序异常中止时,退出代码(如 shell 所见)通常会设置高位,因此该值是 128 或更高。所以一个简单的解决方案可能是

dodgy_command

while [ $? -ge 128 ]
do
  process_data
  dodgy_command
done
Run Code Online (Sandbox Code Playgroud)

如果你特别想要一个段错误而不是任何其他类型的错误,while 行就会变成$? -eq 139(因为 SEGV 是信号 11;128+11=139)。

如果您在失败时没有获得高价值的退出代码,则可能意味着应用程序本身正在捕获错误,并强制使用不同的退出代码。