【问题标题】:How to stop a subprocess? (Python)如何停止子进程? (Python)
【发布时间】:2011-06-27 03:31:23
【问题描述】:

我尝试了 terminate() 和 kill(),但都无法停止我在 python 代码中启动的子进程。

还有其他方法吗?

在 Windows 上使用 Python 2.7

我也尝试了以下没有结果...

os.kill(p.pid, signal.SIGTERM)

import ctypes
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, theprocess.pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)

【问题讨论】:

  • 这个子进程是启动其他进程的shell脚本吗?我在这里记录了一个类似的问题:stackoverflow.com/questions/6102535/…
  • 你是怎么开始的?
  • 使用 subprocess.Popen 启动
  • 你在调用subprocess.Popen()时使用shell=True吗?
  • 使用 TerminateProcess 不好。当你试图杀死它时,你确定该进程仍在运行?

标签: python subprocess


【解决方案1】:

您可以在此处使用 os.system('taskkill'):http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/taskkill.mspx?mfr=true

【讨论】:

    【解决方案2】:

    尝试使用psutil,或其他方式远程杀死进程本身(psutil 是跨平台的,因此代码更好):

    p = psutil.Process(pid)
    p.terminate()  #or p.kill()
    

    代码取自How to terminate process from Python using pid?

    请注意,如果使用shell=True,PID 是 shell 的,而不是它产生的任何进程。要使用shell=True 终止子进程,您可以查看How to terminate a python subprocess launched with shell=True

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多