【发布时间】: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 应该足够了。
-
您是否尝试过调用
taskkillcommand -- 看起来您需要杀死整个树,而不仅仅是一个子进程? -
@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