我要做一个启动器应用程序,我还没有找到一种方法将子进程完全从生成的python进程中分离出来。
当我使用我的桌面(肉桂' s)启动程序启动程序时,进程树会显示:
/ sbin / init - > mdm - > mdm - > 肉桂会话 - > 肉桂 - > 的应用内-i的发射
在我读过的帖子中,这个是最有洞察力/最有帮助的:Launch a completely independent process。但是,由于OP正在寻求运行python代码,因此通常可以通过许多通常优先的方式实现,而不是通过产生独立的进程来实现。
来自堆栈溢出的其他帖子,它们没有回答如何启动detatched python进程:
close_fds=True
,进程生成为python进程的子进程。ValueError: creationflags is only supported on Windows platforms
。nohup
:进程生成为python进程的子进程。据我所知,nohup
或同等版本并非在所有平台上都可用,使其成为仅支持Linux的解决方案。AttributeError: 'module' object has no attribute 'P_DETACH'.
答案 0 :(得分:1)
可以在JonMc的答案here中找到有效的解决方案。我用它来通过'xdg-open'打开文档。
如果您不想使用日志文件,可以将stderr参数更改为stderr=open('/dev/null', 'w'),
。
答案 1 :(得分:0)
我唯一可行的解决方案就是使用shell-detach-ampersand语法进行shell评估。
#!/usr/bin/env python2
import os
os.system('{cmd} &'.format('firefox'))
但是,在窗口管理器会话之外,这可能会在流程树中走得太远,可能不会退出桌面会话。
/ sbin / init - > 火狐