我有一个程序在某些情况下会引发分段错误。我想在发生分段错误时执行一个命令来处理数据,然后再次执行该命令,并一直这样做直到分段错误停止。
作为伪代码的粗略尝试,
dodgy_command
while SegFault
dataProcessing
dodgy_command
end
我想我需要使用 Trap 命令,但我不明白这个命令的语法。
我有一个程序在某些情况下会引发分段错误。我想在发生分段错误时执行一个命令来处理数据,然后再次执行该命令,并一直这样做直到分段错误停止。
作为伪代码的粗略尝试,
dodgy_command
while SegFault
dataProcessing
dodgy_command
end
我想我需要使用 Trap 命令,但我不明白这个命令的语法。
当程序异常中止时,退出代码(如 shell 所见)通常设置高位,因此值为 128 或更高。所以一个简单的解决方案可能是
如果您只需要段错误而不需要任何其他类型的错误,则 while 行变为
$? -eq 139
(因为 SEGV 是信号 11;128+11=139)。如果您在失败时没有获得高价值的退出代码,那么这可能意味着应用程序本身正在捕获错误,并强制使用不同的退出代码。
你没有提到你需要用什么语言来做这件事。所以,我假设是 shell 脚本。
你是对的,你想使用陷阱。当接收到信号时,bash 中的陷阱需要一个字符串来执行。我倾向于使它成为一个函数调用,这样当我捕获信号时我可以清楚地定义我想要做什么。
这是一个示例脚本。
简单,但包含您所要求的基础知识。