我有一个程序在某些情况下会引发分段错误。我想在发生分段错误时执行一个命令来处理数据,然后再次执行该命令,一直这样做,直到分段错误停止。
作为伪代码的粗略尝试,
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
简单,但包含您所要求的基础知识。