【发布时间】:2011-05-08 16:39:28
【问题描述】:
我想尽可能快地重复执行一个子进程。但是,有时该过程会花费太长时间,因此我想将其杀死。 我使用 signal.signal(...) 如下:
ppid=pipeexe.pid
signal.signal(signal.SIGALRM, stop_handler)
signal.alarm(1)
.....
def stop_handler(signal, frame):
print 'Stop test'+testdir+'for time out'
if(pipeexe.poll()==None and hasattr(signal, "SIGKILL")):
os.kill(ppid, signal.SIGKILL)
return False
但有时此代码会尝试阻止下一轮执行。 停止 test/home/lu/workspace/152/treefit/test2 超时 /bin/sh: /home/lu/workspace/153/squib_driver: not found ---这是下一次执行;程序错误地停止了它。
有谁知道如何解决这个问题?我想及时停止不执行 1 秒 time.sleep(n) 经常等待 n 秒。我不希望它可以执行不到 1 秒
【问题讨论】:
-
所以基本上如果子进程运行超过 1 秒,你想杀死它并启动下一个?这是正确的吗?
-
如何创建子流程?因为看起来表达式 ppid=pipeexe.pid 正在获取将要运行的下一个子进程!!!
-
所以基本上如果子进程运行超过 1 秒,你想杀死它并启动下一个?它是否正确?是的,没错
-
如何创建子流程? pipeexe=subprocess.Popen(...)
-
因为看起来表达式 ppid=pipeexe.pid 正在获取将要运行的下一个子进程!我想你可能是对的。但是如何确保下次运行时pid不会改变
标签: python timeout subprocess kill signals