我要制作一个启动器应用程序,但我还没有找到一种方法将子进程完全从产生的 python 进程中分离出来。
当我使用我的桌面(肉桂)启动器启动程序时,进程树会:
/sbin/init-> mdm-> mdm-> cinnamon-session-> cinnamon->the-app-i-launched
在我阅读的线程中,这个是最有见地/最有帮助的:启动一个完全独立的进程。但是当 OP 正在寻求运行 python 代码时得到的答案很混乱,这通常可以通过许多通常首选的方式来实现,而不是通过产生一个独立的进程。
从堆栈溢出的其他帖子中没有回答如何启动分离的python进程:
- Running daemonalized python code : 适用于将python 代码/模块作为守护进程运行,(不是另一个进程/应用程序)与 python 实例分离。
- subprocess.call:进程作为 python 进程的子进程生成。
- os.system:进程作为 python 进程的子进程生成。
- close_fds:(显然)仅限 Windows(R) 的解决方案,需要可移植的解决方案(主要目标是 Debian linux)。尝试
close_fds=True
在 linux 上使用时,进程作为 python 进程的子进程生成。 - creationflags:仅限 Windows(R) 的解决方案。在 linux 上引发:
ValueError: creationflags is only supported on Windows platforms
. - 前缀启动进程
nohup
:进程作为python进程的子进程产生。据我所知,nohup
并非所有平台都提供或等效的,使其成为仅限 linux 的解决方案。 - os.fork:与“运行守护进程 python 代码”相同。
- 多处理:与“运行守护进程 python 代码”相同的问题:仅对运行 python 代码/模块有用。
- os.spawnl* + os.P_NOWAIT:不推荐使用的函数不适用于新代码。在我的测试中,我根本看不到我的进程实际上已经产生了。
- os.spawnl* + os.P_DETACH:仅限 Windows(R),在当前的 python 2.X 版本中似乎已删除:
AttributeError: 'module' object has no attribute 'P_DETACH'.
- os.system + shell fork:我实际上能够看到我的进程运行与 python 进程分离,但是我担心它有错误:
- 依赖于在 shell 中运行命令,这更容易受到恶意、有意或其他方式的攻击?.
- 依赖非便携?POSIX/外壳?在非 Linux 平台上可能无法相互渗透的语法。对于Partial Ref的可移植性,我还没有找到任何好的参考资料。
- subprocess.Popen Alt:我仍然只观察到作为 python 进程的子进程运行的子进程。