我正在为 Linux 编写一个 Python 程序,该程序基本上使用终端向用户提供有关其初始化的反馈,然后它必须放弃对终端的控制并继续在后台执行。我怎样才能做到这一点?
谢谢
您可以使用 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 注意每个进程都有自己的局部变量副本。
希望这可以帮助
只需用python-daemon包装你的程序。
在这里,分叉可能是正确的事情,并且更好地守护进程,但是在不更改脚本的情况下获得几乎相同的效果的简单方法是(正如对问题的评论所暗示的那样)只需将脚本放在后台。
&
然而,不会做的是完全放弃与终端的连接。为此,请使用nohup
:
(nohup python foo.py >foo-output &)
是一种守护脚本的简单方法。这nohup
意味着该进程在其控制终端运行时不会被终止,并且将脚本放入 subshell 的背景(...)
,然后退出,这意味着它最终成为 init 进程的子进程。实际上,这就是“守护进程”的大部分含义。
这是一种比原始问题真正要求的更通用的技术,但它仍然很有用。