我想要:

  • 从我的进程(myexe.exe arg0)启动新进程(myexe.exe arg1)
  • 检索此新进程的PID(在OS Windows中)
  • 当我使用TaskManager Windows命令“结束进程树”杀死我的第一个实体(myexe.exe arg0)时,我需要新的实体(myexe.exe arg1)不被杀死...

  • 我玩过subprocess.Popen,os.exec,os.spawn,os.system ...没有成功。

    解决该问题的另一种方法:如果有人杀死myexe.exe(arg0)的“进程树”,如何保护myexe.exe(arg1)?

    编辑:相同的问题(无答案)HERE

    编辑:以下命令不能保证子流程的独立性
    subprocess.Popen(["myexe.exe",arg[1]],creationflags = DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP,close_fds = True)
    

    最佳答案

    要启动在父进程退出Windows后可以继续运行的子进程,请执行以下操作:

    from subprocess import Popen, PIPE
    
    CREATE_NEW_PROCESS_GROUP = 0x00000200
    DETACHED_PROCESS = 0x00000008
    
    p = Popen(["myexe.exe", "arg1"], stdin=PIPE, stdout=PIPE, stderr=PIPE,
              creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP)
    print(p.pid)
    

    Windows进程创建标志为here

    A more portable version is here

    10-05 22:44