哎哟!我有一个 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 ,有没有人知道一种方法来确保底层进程被杀死?
谢谢,
图努兹