Auto kill process and child process of multiprocessing Pool
Question: I am using multiprocessing module for parallel processing. Bellow code snippet
search the string filename in X location and return the file name where the
string found. But in some cases it take long time to search process so i was
trying to kill the search process with take more than 300 seconds.For that i
used timeout == 300 as given bellow , this kills the search process but it
dosent kill the child process spawn by bellow code.

I tried to find multiple way but no success :/

How can i kill parent process from Pool along with its child process ?

    
    
    import os
    from multiprocessing import Pool
    
    def runCmd(cmd):
         lresult = os.popen(cmd).read()
         return lresult
    
    main ():
         p = Pool(4)
         data_paths = [list of paths of store data]
         search_cmds = [ "SearchText.exe %s < %s"%(data_path, filename) for data_path in data_paths ]
         results = [p.apply_async(runCmd, (cmd,), callback = log_result) for cmd in search_cmds]
         try:
            for result in results:
                root.append(result.get(timeout=300))
            #rool holds the result of search process
         except TimeoutError:
            for c in multiprocessing.active_children():
                print '----->',c.pid
                os.kill(c.pid, signal.SIGTERM)
         p.close()
         p.join()
    
    if __name__ == '__main__':
        main()
    

Process Tree in Process Explorer :

    
    
    cmd.exe
    ------python.exe
    ----------------python.exe
    --------------------------cmd.exe
    ---------------------------------SearchText.exe
    ----------------python.exe
    --------------------------cmd.exe
    ---------------------------------SearchText.exe
    ----------------python.exe
    --------------------------cmd.exe
    ---------------------------------SearchText.exe
    ----------------python.exe
    --------------------------cmd.exe
    ---------------------------------SearchText.exe
    

above code snippet dosnt kill the child process

    
    
    --------------------------cmd.exe
    ---------------------------------SearchText.exe
    --------------------------cmd.exe
    ---------------------------------SearchText.exe
    --------------------------cmd.exe
    ---------------------------------SearchText.exe
    --------------------------cmd.exe
    ---------------------------------SearchText.exe
    

Theses child search process retain , these child process also get killed .

Please guild.

Thanks


Answer: I am able to solve my Issue using psutil module

Found solution on bellow post:

    
    
    import psutil, os
    
    def kill_proc_tree(pid, including_parent=True):    
        parent = psutil.Process(pid)
        for child in parent.get_children(recursive=True):
            child.kill()
        if including_parent:
            parent.kill()
    
    me = os.getpid()
    kill_proc_tree(me)
    

> <http://stackoverflow.com/a/4229404/420557>

