嗨!我有一个python包装器,它收集一些命令行选项,将它们的子集嵌入到文件中,并通过将文件名作为输入并将剩余的命令行选项作为选项来调用子进程。然后它处理输出并以不同的格式打印出来。子进程的调用方式如下:
# generate cfg file
cfg_file = open(cfg_file_name, "w")
...
# call executable
command = "./%s -time %s -model %s" % (executable, args.time, args.model)
if args.branching != None:
command += " -branching %s" % args.branching
command += " %s" % (cfg_file_name)
output = run_and_report(command)
# process output
...
run_and_report
定义为:
def run_and_report(cmd):
"""Run command on the shell, report stdout, stderr"""
proc = run(cmd)
proc.wait()
output = "".join(map(lambda x: x.rstrip(), proc.stdout))
return output
和run
为
def run(cmd):
"""Open process"""
return Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE, close_fds=True)
包装器本身通过更高级别的过程以类似的方式调用,它不时地需要杀死它产生的一些包装器进程。我的问题是,有时杀死包装器似乎会使executable
运行,因此包装器被有效地杀死,但底层进程却没有。但是,据我所知,不可能像在其他中断中那样在python中捕获SIGKILL,那么有没有人知道确保底层进程被杀死的方法?
谢谢,
Tunnuz