Subprocess.popen不创建独立进程

时间:2019-03-18 06:20:32

标签: python python-3.x process

我有一段代码负责产生新的独立进程(应在主进程终止后生效)。

当我使用PyCharm中的'run'运行此代码时,它们的确独立产生,即使父母终止后也可以存活。

问题是,从cmd shell(在Windows中)运行时,它们会生成,但是好像它们绑定到了spawning shell(不是python脚本),因此主脚本完成了,但shell保持活动状态,并且一旦关闭它,进程就会终止。

service_path = "some_service_path"
service_arguments = "some arguments"
python_execution_location = os.path.join(os.environ["PYTHON3_ROOT"], "python.exe")
execution_value = "{} {} {}".format(python_execution_location, service_path, service_arguments)
my_process = subprocess.Popen(execution_value, shell=True)

2 个答案:

答案 0 :(得分:2)

您可能需要发送一个creationflags arg,以使其完全成为一个单独的过程

subprocess.Popen(executable, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP, close_fds=True)

python.org link

答案 1 :(得分:1)

在Windows中,您可以使用creationflags的{​​{1}}选项。

Popen

这将创建一个分离的进程(守护进程)。

https://docs.microsoft.com/en-us/windows/desktop/ProcThread/process-creation-flags

  

对于控制台进程,新进程不会继承其父进程的   控制台(默认)。新过程可以调用AllocConsole   稍后再创建控制台。了解更多信息,   请参阅创建控制台。