我正在为Linux编写一个Python程序,该程序基本上使用终端向用户提供初始化反馈,然后它必须放弃对终端的控制并继续在后台执行。我怎样才能做到这一点?
谢谢
答案 0 :(得分:2)
您可以使用os.fork()创建子进程:
import os
import time
msg = raw_input("Enter message for child process")
x = os.fork()
if not x:
for i in range(5):
time.sleep(3)
print msg
os.fork()在子进程中返回0,在paret进程中返回子进程ID 请注意,每个进程都有自己的局部变量副本。
希望这有帮助
答案 1 :(得分:1)
只需使用python-daemon包装您的程序。
答案 2 :(得分:1)
分叉可能是正确的事情,在这里,并且更好地进行守护,但是在不改变脚本的情况下获得大致相同效果的简单方法是(如问题的评论所示)将脚本简单地放入背景
然而,&
不会做的是完全放弃与终端的连接。为此,请使用nohup
:
(nohup python foo.py >foo-output &)
是一种简单的守护脚本的方法。 nohup
表示当控制终端进入时,进程不会被终止,并且将脚本放入子shell (...)
的后台,然后退出,意味着它最终成为子进程的子进程init进程。实际上,这就是“守护”的意思。
这是一种比原始问题所要求的更为通用的技术,但它仍然有用。