围绕引发分段错误的命令构建 while 循环

围绕引发分段错误的命令构建 while 循环

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

作为伪代码的粗略尝试,

dodgy_command

while SegFault
         dataProcessing
         dodgy_command
end

我认为我需要使用 Trap 命令,但我不理解该命令的语法。

答案1

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

dodgy_command

while [ $? -ge 128 ]
do
  process_data
  dodgy_command
done

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

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

答案2

您没有提到需要使用什么语言来执行此操作。因此,我假设使用 shell 脚本。

你是对的,你想使用陷阱。 bash 中的陷阱在收到信号时需要执行一个字符串。我倾向于将其设为函数调用,这样我就可以清楚地定义捕获信号时要执行的操作。

这是一个示例脚本。

#!/bin/bash

# define the function that will handle the trap
sigSegFault() { echo "Inside sigSegFault"; }

# Trap the Segmentation Violation (signal 11) signal
trap sigSegFault SEGV

# Start infinite loop    
while [[ true ]]; do
  sleep 10
done

exit 0

简单,但包含您所要求的基础知识。

相关内容