我使用下面的Command类来超时一个正在运行的命令。它可以很好地使用shell命令,但是当我使用命令java -jar将其传递给Command类来启动java程序时,它似乎没有终止java进程。请帮忙。在class Command(object):
cmd = None
process = None
status = None
output, error = '', ''
def __init__(self, cmd):
# if isinstance(cmd, basestring):
# cmd = shlex.split(cmd)
self.cmd = cmd
#self.process = None
def run(self, timeout, outputfile, errfile):
def target():
print 'Thread started'
try:
print self.cmd
open(outputfile, 'w').close()
open(errfile, 'w').close()
self.process = subprocess.Popen(self.cmd, shell=True, stdout = file(outputfile, 'w+'), stderr = file(errfile, 'w+')) #
(self.output, self.error) = self.process.communicate() #
self.status = self.process.returncode
print self.output #"Out:'%s'" %
print self.error #"Err:'%s'" %
print 'Thread finished'
except:
self.error = traceback.format_exc()
self.status = -1
print self.error
thread = threading.Thread(target=target)
thread.start()
thread.join(timeout)
if thread.is_alive():
print 'Terminating process'
self.process.kill() #terminate
thread.join()
print self.status