def METHOD_NAME( s_Cmd, b_Shell=False, timeo=None, meml=None ):
    import psutil, shlex, subprocess, resource
    if b_Shell:
        l_Cmd = s_Cmd
    else:
        l_Cmd = shlex.split( s_Cmd )
    tm = timeit.default_timer()
    ################# In the following, the subprocess.RUN method fails to kill shell calls on Linux
    #try:
    #    completed = subprocess.run( l_Cmd, shell=b_Shell,
    #      universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=timeo )
    #except subprocess.TimeoutExpired as te:
    #    completed = te
    ################# Using psutils
    proc = psutil.Popen(l_Cmd, shell=b_Shell,
          universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    if None!=meml:
        if hasattr( psutil, 'RLIMIT_AS' ):  ## TODO move into preexec_fn for parallel tests?
            proc.rlimit( resource.RLIMIT_AS, ( meml[0]*1000, meml[1]*1000 ) )
        else:
            print( "  ... but the OS doesn't support RLIMIT_AS." )
    completed = Output()
    try:
        completed.stdout, completed.stderr = proc.communicate(timeout=timeo)
    except subprocess.TimeoutExpired:
        print ( " soft_kill. ", end='' )
        procs = psutil.Process().children(recursive=True)
        for p in procs:
            p.terminate()
        try:
            completed.stdout, completed.stderr = proc.communicate(timeout=1)
        except subprocess.TimeoutExpired as te:
            print ( " hard_kill. ", end='' )
            procs = psutil.Process().children(recursive=True)
            for p in procs:
                p.kill()
            completed.stdout, completed.stderr = proc.communicate()
    ### Clean up: (does psutil.Process.communicate() wait for all descendants?)  -----------------------------------
    procs = psutil.Process().children(recursive=True)
    for p in procs:
        p.kill()
    ### OR: even Queue?