优雅处理段错误

8 投票
2 回答
779 浏览
提问于 2025-04-16 15:59

我正在用Python写一个程序,这个程序需要在Linux上使用一个封闭源代码的API。这个API有时候能正常工作,有时候会出现段错误(segfault),导致我的程序崩溃。不过,如果程序能运行10秒钟,就能安全地继续运行下去(错误只会在开始的时候发生)。

我觉得我需要一个脚本,功能如下:

启动我的Python程序,

等待10秒,

检查Python程序是否还在运行,

如果它还在运行,脚本就结束自己,但不结束Python程序,

如果Python程序没有在运行,那么就重复这个过程。

这样的程序有可能实现吗?段错误会不会也把这个脚本杀掉?

2 个回答

1

你能把对这个有问题的API的调用放在一个子进程里吗?这样你就可以检查它的退出状态,并在出现崩溃的时候进行处理,使用Try ... Catch来捕捉错误。

2

是的,这样的程序是完全可以实现的。你只需要在不同的进程中运行这两个程序——出现段错误(SEGFAULT)只会终止发生错误的那个进程。

如果你在使用Linux,可以选择用bash或者python来实现。只需在一个单独的进程中启动那个会出错的脚本。用python写的代码可能看起来像这样:

import subprocess
import time

start = time.clock()
ret = subprocess.call(['myprog', 'myarg0', ...])
end = time.clock()
if end - start > threshold:
    restart()

另外,也许当这个进程因为段错误而结束时,它的返回代码会有一些有意义的值。

撰写回答