什么是守护进程?

Mar*_*ppi 12 services

我听到很多关于在我的 Ubuntu 计算机上运行的守护进程的讨论——它们是什么?

Ste*_*zzo 16

简而言之,守护进程是一个后台进程

守护进程可以只是在后台运行的普通程序,但是大多数是通过启动一个进程、派生它并退出父进程来创建的。

fork 进程意味着创建它的精确副本。如果真正的父进程立即终止,该进程的父进程现在是init进程/sbin/init,它是每个类 Unix 操作系统上启动的第一件事。现在,该进程被称为守护进程,它没有与之关联的 TTY。

这是 Python 中守护进程的示例:

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"
Run Code Online (Sandbox Code Playgroud)

严格来说,它还不是一个。您还必须更改当前工作目录,将标准输入和输出重新定义为日志文件等。您可以阅读这篇维基百科文章中的血腥细节。

如果您运行该示例,您会注意到,即使您在命令行上启动的进程已终止,它也会在两秒钟后打印出来。该进程的副本现在由 init 运行。

  • 为了扩展这一点,如果您是从 Windows 进入 Linux,您可以将守护进程视为 Windows 的“服务”的 *nix 等价物。 (8认同)