1

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

谢谢

4

3 回答 3

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 注意每个进程都有自己的局部变量副本。

希望这可以帮助

于 2012-04-07T07:31:16.987 回答
1

只需用python-daemon包装你的程序。

于 2012-04-07T05:04:53.297 回答
1

在这里,分叉可能是正确的事情,并且更好地守护进程,但是在不更改脚本的情况下获得几乎相同的效果的简单方法是(正如对问题的评论所暗示的那样)只需将脚本放在后台。

&然而,不会做的是完全放弃与终端的连接。为此,请使用nohup

(nohup python foo.py >foo-output &)

是一种守护脚本的简单方法。这nohup意味着该进程在其控制终端运行时不会被终止,并且将脚本放入 subshel​​l 的背景(...),然后退出,这意味着它最终成为 init 进程的子进程。实际上,这就是“守护进程”的大部分含义。

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

于 2012-04-09T11:51:27.323 回答