我有一段代码负责产生新的独立进程(应在主进程终止后生效)。
当我使用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)
答案 0 :(得分:2)
您可能需要发送一个creationflags arg,以使其完全成为一个单独的过程
subprocess.Popen(executable, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP, close_fds=True)
答案 1 :(得分:1)
在Windows中,您可以使用creationflags
的{{1}}选项。
Popen
这将创建一个分离的进程(守护进程)。
https://docs.microsoft.com/en-us/windows/desktop/ProcThread/process-creation-flags
对于控制台进程,新进程不会继承其父进程的 控制台(默认)。新过程可以调用AllocConsole 稍后再创建控制台。了解更多信息, 请参阅创建控制台。