我使用在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)

接受错误报告为注释)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top