Python:Howto启动一个完整的进程而不是subprocess并检索PID

我想要:

  1. 从我的进程(myexe.exe arg0)启动一个新进程(myexe.exe arg1)
  2. 检索这个新进程的PID(os窗口
  3. 当我用TaskManager的Windows命令“结束进程树”杀死我的第一个实体(myexe.exe arg0)时,我需要新的(myexe.exe arg1)不会被杀死…

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

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

编辑:同样的问题(没有答案)在这里

编辑:下面的命令不保证subprocess的独立性

subprocess.Popen(["myexe.exe",arg[1]],creationflags = DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP,close_fds = True) 

Solutions Collecting From Web of "Python:Howto启动一个完整的进程而不是subprocess并检索PID"

要启动父进程在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进程创建标志在这里

更便携的版本在这里 。

几年前我在Windows上做过类似的事情,我的问题是想要杀死子进程。

我认为你可以使用pid = Popen(["/bin/mycmd", "myarg"]).pid来运行子pid = Popen(["/bin/mycmd", "myarg"]).pid所以我不确定真正的问题是什么,所以我猜测这是当你杀死主进程。

IIRC这是与国旗有关的事情。

我不能证明这一点,因为我没有运行Windows。

 subprocess.CREATE_NEW_CONSOLE The new process has a new console, instead of inheriting its parent's console (the default). This flag is always set when Popen is created with shell=True. subprocess.CREATE_NEW_PROCESS_GROUP A Popen creationflags parameter to specify that a new process group will be created. This flag is necessary for using os.kill() on the subprocess. This flag is ignored if CREATE_NEW_CONSOLE is specified. 

所以,如果我理解你的代码应该是这样的:

 from subprocess import Popen, PIPE script = "C:\myexe.exe" param = "-help" DETACHED_PROCESS = 0x00000008 CREATE_NEW_PROCESS_GROUP = 0x00000200 pid = Popen([script, param], shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP) 

至少我试过这个,为我工作。