Python:超时时杀死或终止子进程

我想尽可能快地重复执行一个子进程。但是,有时候这个过程会花费太长时间,所以我想杀死它。
我使用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

但有时这段代码会尝试停止下一轮执行。
停止测试/ home / lu / workspace / 152 / treefit / test2for超时
/ bin / sh:/ home / lu / workspace / 153 / squib_driver:没有找到—这是下一个执行;该程序错误地停止它。

有谁知道如何解决这个问题?我想停止时间不执行1秒的time.sleep(n)经常等待n秒。我不想要我想要的可以执行不到1秒

你可以这样做:

import subprocess as sub
import threading

class RunCmd(threading.Thread):
    def __init__(self, cmd, timeout):
        threading.Thread.__init__(self)
        self.cmd = cmd
        self.timeout = timeout

    def run(self):
        self.p = sub.Popen(self.cmd)
        self.p.wait()

    def Run(self):
        self.start()
        self.join(self.timeout)

        if self.is_alive():
            self.p.terminate()      #use self.p.kill() if process needs a kill -9
            self.join()

RunCmd(["./someProg", "arg1"], 60).Run()

这个想法是创建一个运行命令的线程,如果超时超过了一个合适的值(在这种情况下为60秒),则该命令将被杀死。

翻译自:https://stackoverflow.com/questions/4158502/python-kill-or-terminate-subprocess-when-timeout

转载注明原文:Python:超时时杀死或终止子进程