Search code examples
pythonwindowsprocesssubprocesskill-process

subprocess: deleting child processes in Windows


On Windows, subprocess.Popen.terminate calls win32's TerminalProcess. However, the behavior I see is that child processes of the process I am trying to terminate are still running. Why is that? How do I ensure all child processes started by the process are killed?


Solution

  • By using psutil:

    import psutil, os
    
    def kill_proc_tree(pid, including_parent=True):    
        parent = psutil.Process(pid)
        children = parent.children(recursive=True)
        for child in children:
            child.kill()
        gone, still_alive = psutil.wait_procs(children, timeout=5)
        if including_parent:
            parent.kill()
            parent.wait(5)
    
    me = os.getpid()
    kill_proc_tree(me)