我想在5分钟后杀死一个进程(ex),我已用
打开了subprocess.Popen()
p = subprocess.Popen('calc.exe', shell=True) # example
我用print(p.pid)
打印了点子,用time.sleep(10)
睡了10秒,然后用p.kill()
杀死了这个过程。
问题是calc.exe
仍在运行。我已经使用Process Explorer
来查看此处发生的情况,并且子流程似乎会创建一个带有pid = p.pid
的cmd,它会创建calc.exe
,但是我会使用另一个pid #39;知道。
此处的所有代码:
import subprocess, os, time
p = subprocess.Popen('calc.exe', shell=True)
time.sleep(1)
print(p.pid)
p.kill()
那么我做错了什么?
谢谢!
答案 0 :(得分:6)
p.kill()
正在通过cmd.exe
shell=True
选项杀死您正在产生的Popen
进程。该过程是p.pid
所指的过程。从shell=True
语句中移除Popen
,它会像您期望的那样杀死calc.exe
。
答案 1 :(得分:0)
我不是运行程序但它会工作::
import subprocess
import time
p = subprocess.Popen(
['calc.exe'], stdin=subprocess.PIPE)
p.communicate()
time.sleep(1)
print (p.pid)
p.kill()
如果有效,请告诉我......