如何终止由Python Popen创建的进程

时间:2018-07-13 12:58:14

标签: python python-3.x subprocess terminate

我正在使用proc = subprocess.Popen("calc.exe"),然后time.sleep(time),然后要终止进程的情况下运行calc.exe(Windows 10,python 3.6):os.kill(proc.pid, -9)os.kill(proc.pid, signal.SIGTERM)给了我错误

  

“访问被拒绝”。

我也尝试了proc.terminate-它没有帮助。

我还注意到proc.pid提供的PID与任务管理器中显示的PID不同。有什么想法可以杀死我的程序吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试使用Windows终止进程。

command = "Taskkill /IM calc.exe /F"
proc = subprocess.Popen(command)

import os
os.system("taskkill /im Calculator.exe /f")

如果您想确定的话,请尝试递归杀死!!

def kill_process(proc):
    # Check process is running, Kill it if it is,

    # Try to kill the process - 0 exit code == success

    kill = "TaskKill /IM {} /F".format(proc)

    res = subprocess.run(kill)

    if res == 0:
        return True  # Process Killed
    else:
        kill_process(proc)  # Process not killed repeat until it is!

kill_process('Calculator.exe')

答案 1 :(得分:0)

在python 3子进程API中,可以通过调用杀死孩子

Popen.kill()

,它是Windows(see here)中Popen.terminate()的别名。如果这不起作用,您可以尝试

os.system("TASKKILL /F /PID [child PID]")

您可以使用Popen.pid()

获取孩子的PID