在Python 2.5中,如何杀死子进程?

Uri*_*Uri 28 python subprocess

我在Python中使用子进程包来运行子进程,我后来需要杀死它.但是,子进程包的文档声明terminate()函数仅在2.6中可用

我们使用2.5运行Linux,出于向后兼容的原因,我无法升级到2.6,有什么替代方案?我猜这些函数是方便的东西.

Gar*_*son 41

你在进程pid上调用os.kill.

os.kill(process.pid, signal.SIGKILL)
Run Code Online (Sandbox Code Playgroud)

你很好,因为你在Linux上.Windows用户运气不好.

  • os.kill(p.pid,signal.SIGTERM)更精确 (4认同)

Ale*_*lli 40

要完成@ Gareth的答案,请在Windows上执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

不是那么优雅os.kill(theprocess.pid, 9),但确实有效;-)


sso*_*ler 6

为了完成@ Gareth和@Alex的答案,如果您不想打扰底层系统,可以使用psutil.

psutil是一个模块,提供了一个接口,用于通过使用Python以可移植的方式检索有关正在运行的进程和系统利用率(CPU,内存)的信息,实现命令行工具(如ps,top,kill和Windows任务管理器)提供的许多功能.

它目前支持Linux,OS X,FreeBSD和Windows,使用2.4到3.1的Python版本,使用独特的代码库.