我正在尝试从 Python 启动一个服务器来对 Java 中的 PMML 模型进行评分。计算完成后,我希望能够关闭该服务器(即终止进程)。我使用的是 Windows 10。但是,我发现它比我想象的更令人困惑。
首先,我像这样启动服务器:
p = subprocess.Popen('START /B java -jar openscoring-server-executable-1.4.3.jar',
shell=True)
我让它在后台运行,以便在用户运行脚本时不显示 CMD 窗口。为了使这成为可能,我认为该shell=True参数是必要的。
当我尝试使用此行终止进程时:
subprocess.call("TASKKILL /F /PID {pid} /T".format(pid=p.pid))
该进程仍在运行。实际上,p.pid任务管理器中甚至不存在返回的PID 。在尝试使用此答案中提供的解决方案时,我已经确认了这一点:
def kill(proc_pid):
process = psutil.Process(proc_pid)
for proc in process.children(recursive=True):
proc.kill()
process.kill()
kill(p.pid)
这将返回异常NoSuchProcess: no process found with pid 5280。
我可以通过任务管理器看到分配给我想杀死的进程的 PID:
但我不知道如何在 Python 中找到那个 PID 来终止它。我在网站上找到的答案似乎不适用于后台运行的进程。
编辑:
我认为如果我能够使用 运行命令,这可以解决shell=False,但由于START /B. 这将返回一个错误:
p = subprocess.Popen(['START', '/B', 'java', '-jar openscoring-server-executable-1.4.3.jar'])
心有法竹
长风秋雁
12345678_0001
相关分类