【问题标题】:How to terminate process created by Python Popen如何终止 Python Popen 创建的进程
【发布时间】:2018-12-21 20:50:01
【问题描述】:

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

“拒绝访问”。

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

而且我还注意到 proc.pid 提供的 PID 与任务管理器中显示的 PID 不同。任何想法如何杀死我的进程?

谢谢!

【问题讨论】:

标签: python python-3.x subprocess terminate


【解决方案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')

【讨论】:

  • 好的,谢谢!我会在星期一试一试,然后把我的结果写给你。 P.S,我刚刚尝试使用 proc.terminate() 执行我在 Windows 7 上编写的代码,它可以工作!你知道为什么在 Win10 上没有吗?
  • 可能与用户访问权限有关..也许尝试以admin 运行脚本。我在 Windows 10 上遇到了同样的问题,不得不编写这个函数来完成这项工作..
  • 它没有帮助。在任务管理器中看到该进程是使用名称“Calculator.exe”(不是 calc.exe)创建的。我尝试再次实现“proc.terminate()” - 它可以正常工作,但是当脚本终止时,计算器仍在工作:(
  • 如果从 cmd 运行 TaskKill /IM calc.exe /F 会发生什么? (也可以试试 Calculator.exe)
  • Calculator.exe - 成功终止,calc.exe 报错:windows 找不到这样的进程
【解决方案2】:

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

Popen.kill()

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

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

你可以通过Popen.pid()获取孩子的PID

【讨论】:

  • 谢谢!但是为什么 proc.pid 给出的值与任务管理器中的 PID 不同呢?
猜你喜欢
  • 1970-01-01
  • 2015-03-22
  • 2010-09-25
  • 2012-03-14
  • 2021-11-08
  • 2010-12-10
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
相关资源
最近更新 更多