优雅处理段错误
我正在用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()
另外,也许当这个进程因为段错误而结束时,它的返回代码会有一些有意义的值。