如何让程序放弃对终端的控制?

时间:2012-04-07 01:45:13

标签: python shell unix terminal

我正在为Linux编写一个Python程序,该程序基本上使用终端向用户提供初始化反馈,然后它必须放弃对终端的控制并继续在后台执行。我怎样才能做到这一点?

谢谢

3 个答案:

答案 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进程。实际上,这就是“守护”的意思。

这是一种比原始问题所要求的更为通用的技术,但它仍然有用。