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

28 投票
4 回答
21569 浏览
提问于 2025-04-15 12:36

我在用Python的subprocess包来运行一个子进程,之后我需要把它杀掉。不过,subprocess包的文档上说terminate()这个函数只有在2.6版本才有。

我们现在用的是Linux系统,版本是2.5,出于兼容性考虑我不能升级到2.6,那有没有其他的办法呢?我在想这些函数可能是为了方便而提供的。

4 个回答

6

为了补充@Gareth和@Alex的回答,如果你不想去研究底层系统,可以使用 psutil

psutil是一个模块,它提供了一种接口,让你可以用Python轻松获取正在运行的进程和系统使用情况(比如CPU和内存)的信息。它实现了很多命令行工具(像ps、top、kill和Windows任务管理器)提供的功能。

目前,它支持Linux、OS X、FreeBSD和Windows,适用于Python版本从2.4到3.1,使用的是一个独特的代码基础。

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)

虽然这个方法没有 os.kill(theprocess.pid, 9) 那么优雅,但它确实有效;-)

41

你可以用 os.kill 来结束一个进程,前提是你知道那个进程的编号(pid)。

os.kill(process.pid, signal.SIGKILL)

如果你是在 Linux 系统上,这样做是没问题的。不过,如果你是 Windows 用户,就没那么简单了。

撰写回答