使用 Popen 打开一个进程并在一段时间后终止

Open a process with Popen and kill after a time

我想在 5 分钟后终止一个进程(例如),我用

打开它
subprocess.Popen()
p = subprocess.Popen('calc.exe', shell=True)  # example

我用 print(p.pid) 打印了 pip,用 time.sleep(10) 睡了 10 秒,然后用 p.kill().

终止了进程

问题是 calc.exe 仍然是 运行。我已经使用 Process Explorer 来查看这里发生了什么,似乎子进程将创建一个带有 pid = p.pid 的 cmd,它创建 calc.exe,但使用另一个我没有的 pid知道。

此处所有代码:

import subprocess, os, time

p = subprocess.Popen('calc.exe', shell=True)

time.sleep(1)
print(p.pid)
p.kill()

那我做错了什么?

谢谢!

p.kill() 正在终止您使用 Popenshell=True 选项生成的 cmd.exe 进程。这个过程就是 p.pid 所指的。从你的 Popen 语句中删除 shell=True,它会像你期望的那样杀死 calc.exe

我不是 运行 程序,但它会工作::

import subprocess
import time
p = subprocess.Popen(
['calc.exe'], stdin=subprocess.PIPE)
p.communicate()

time.sleep(1)
print (p.pid)
p.kill()

如果可行,请告诉我...