我正在编写一些代码来测试多线程程序(学生作业——可能是错误的),并且希望能够检测到它们何时死锁。正常运行时,程序会定期将输出输出到标准输出,因此非常简单:如果 X 秒内没有输出,则终止它并报告死锁。这是函数原型:
def run_with_watchdog(command, timeout):
"""Run shell command, watching for output. If the program doesn't
produce any output for <timeout> seconds, kill it and return 1.
If the program ends successfully, return 0."""
我可以自己编写,但要正确使用有点棘手,所以如果可能的话,我更愿意使用现有代码。有人写过类似的吗?
好的,请参阅下面的解决方案。如果您正在做类似的事情,子流程模块也可能是相关的。