首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:如何启动完整进程而不是子进程并检索PID

Python:如何启动完整进程而不是子进程并检索PID
EN

Stack Overflow用户
提问于 2013-02-10 11:28:50
回答 3查看 14.1K关注 0票数 17

我想:

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

我和subprocess.Popen,os.exec,os.spawn,os.system.但没有成功。

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

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

编辑:下面的命令不能保证子进程的独立性

代码语言:javascript
运行
复制
subprocess.Popen(["myexe.exe",arg[1]],creationflags = DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP,close_fds = True)
EN

回答 3

Stack Overflow用户

发布于 2013-02-10 11:53:35

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

代码语言:javascript
运行
复制
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进程创建标志是这里

这里有一个更便携的版本

票数 13
EN

Stack Overflow用户

发布于 2013-02-10 11:36:36

几年前,我在windows上做了类似的事情,我的问题是想要扼杀孩子的进程。

我假设您可以使用pid = Popen(["/bin/mycmd", "myarg"]).pid运行子进程,所以我不知道真正的问题是什么,所以我猜是在您终止主进程的时候。

这和国旗有关。

我无法证明这一点,因为我没有运行Windows。

代码语言:javascript
运行
复制
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.
票数 1
EN

Stack Overflow用户

发布于 2015-02-18 19:01:32

所以如果我明白你的意思,代码应该是这样的:

代码语言:javascript
运行
复制
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)

至少我试过这个并且为我工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14797236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档