In Python 2.5, how do I kill a subprocess?

前端 未结 4 1049
灰色年华
灰色年华 2020-12-01 04:21

I am using the subprocess package in Python to run a subprocess, which I later need to kill. However, the documentation of the subprocess package states that the terminate()

相关标签:
4条回答
  • 2020-12-01 04:55

    Thats a copy&pase complete solution:

    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)
    

    Accepting bug reports as comments ;)

    0 讨论(0)
  • 2020-12-01 05:00

    In order to complete @Gareth's and @Alex answers, if you don't want to bother with the underlaying system, you can use psutil.

    psutil is a module providing an interface for retrieving information on running processes and system utilization (CPU, memory) in a portable way by using Python, implementing many functionalities offered by command line tools like ps, top, kill and Windows task manager.

    It currently supports Linux, OS X, FreeBSD and Windows with Python versions from 2.4 to 3.1 by using a unique code base.

    0 讨论(0)
  • 2020-12-01 05:05

    You call os.kill on the process pid.

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

    You're OK because you're on on Linux. Windows users are out of luck.

    0 讨论(0)
  • 2020-12-01 05:20

    To complete @Gareth's answer, on Windows you do:

    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)
    

    not quite as elegant as os.kill(theprocess.pid, 9), but it does work;-)

    0 讨论(0)
提交回复
热议问题