题
我使用在Python子进程包来运行的子进程,这是我后来需要杀死。然而,子包的文档指出终止()函数是仅可从2.6
我们与2.5和我不能升级到2.6的向后兼容性原因运行Linux,什么是另类?我猜测,这些功能是什么便捷的方法。
解决方案
您打电话os.kill上进程pid。
os.kill(process.pid, signal.SIGKILL)
您真行,因为你是在Linux上。 Windows用户的运气了。
其他提示
要完成@加雷思的答案,在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)
优雅,但它的工作; - )
为了完成@加雷思的和@Alex答案,如果你不想与下伏系统打扰,你可以使用的 psutil 。
psutil是一个模块提供一 接口用于检索信息 对正在运行的进程和系统 利用率(CPU,存储器)中一个 通过使用Python可移植的方法, 实现许多功能 通过命令行工具,如PS提供, 顶,杀和Windows任务管理器。
它目前支持的Linux,OS X, FreeBSD的和Windows使用Python 从2.4到版本3.1通过使用 唯一的代码库。
那副本&PASE完整的解决方案:
def terminate_process(pid):
# all this shit is because we are stuck with Python 2.5 and
# we cannot use Popen.terminate()
if sys.platform == 'win32':
import ctypes
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)
else:
os.kill(pid, signal.SIGKILL)
接受错误报告为注释)
不隶属于 StackOverflow