在Python 2.5中如何杀死子进程?
我在用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 用户,就没那么简单了。