使用 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()
正在终止您使用 Popen
的 shell=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()
如果可行,请告诉我...
我想在 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()
正在终止您使用 Popen
的 shell=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()
如果可行,请告诉我...