【问题标题】:How to kill a process in python 2.5 on windows 64bit platform?如何在 Windows 64 位平台上杀死 python 2.5 中的进程?
【发布时间】:2015-07-22 04:06:06
【问题描述】:

我有一个 python 脚本,我通过它打开三个可执行文件,如下所示:

Aa=subprocess.Popen([r"..\location\learning\A.exe"])
Bb=subprocess.Popen([r"..\location\learning\new\B.bat"])
Cc=subprocess.Popen([r"..\location\learning\new\B.bat"])

这三个文件都被打开了。现在,下一步我想杀死这三个打开的​​模块。所以,首先我试图杀死“Aa”,如下所示:

PROCESS_TERMINATE= 1
k = ctypes.windll.kernel32klll
handle = k.OpenProcess(PROCESS_TERMINATE, False,Aa.pid)
k.TerminateProcess(handle, -1)
k.CloseHandle(handle)

但是在添加这些行之后,三个模块'Aa','Bb'和'Cc'它们没有被打开。所以,我想知道一些干净的解决方案,以便首先执行所有三个模块并且然后过了一段时间他们自己关闭了。因为,我在 Windows 64 位平台上使用 python 2.5,所以请相应地提出解决方案。

【问题讨论】:

  • os.kill 应该足够了。
  • 您是否尝试过调用taskkill command -- 看起来您需要杀死整个树,而不仅仅是一个子进程?
  • @DarceyMckelvey 在 2.7 中添加了对 Windows 中 os.kill 的支持
  • 使用相对路径启动进程容易出错。如果命令以来自另一个目录的完整路径启动,您将找不到您的子进程可执行文件。
  • 如果批处理文件在没有等待它启动的进程的情况下退出(例如使用start 命令),那么cmd.exe 已经退出并且taskkill /F /T 将失败。您可以尝试以下方法:subprocess.call('wmic process where ParentProcessId=%d call Terminate' % p.pid).

标签: python windows subprocess terminate python-2.5


【解决方案1】:

subprocess.Popen() 返回的进程从 Python 2.6 开始有一个 terminate() 方法来杀死子进程。要使用它,您必须升级 Python 安装或并行安装两个版本的 Python。

但更好的方法通常是找出如何让这个进程停止并使用它。当您向它们发送某些标准输入或关闭Popen 创建的管道时,许多进程会停止。

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 2015-04-17
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多