我听到很多关于在我的Ubuntu计算机上运行的守护程序的讨论-它们是什么?
我听到很多关于在我的Ubuntu计算机上运行的守护程序的讨论-它们是什么?
Answers:
简而言之,守护进程是一个后台进程。
守护程序只能是在后台运行的普通程序,但是大多数守护程序是通过启动进程,将其派生并退出父进程创建的。
派生一个进程意味着创建它的精确副本。如果真正的父进程立即终止,则该进程的父进程现在是位于的初始化进程/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!"
严格来说,这还不是一个。您还必须更改当前的工作目录,将标准输入和输出恢复为日志文件,等等。您可以阅读此Wikipedia文章中的血腥细节。
如果您运行该示例,则即使在命令行上启动的过程已终止,您也会在两秒钟后注意到它会打印出来。此过程的副本现在由“ init”运行。
/proc/*/fd
。行为良好的守护程序将通过放弃对stdout,stderr和stdin的句柄,将自己完全与tty分离。
在多任务计算机操作系统中,守护程序是一种计算机程序,它作为后台进程运行,而不是在交互式用户的直接控制下运行。传统上,守护程序的进程名称以字母d结尾,以澄清该进程实际上是一个守护程序,并区分守护程序和普通计算机程序。例如,syslogd是实现系统日志记录工具的守护程序,而sshd是为传入的SSH连接提供服务的守护程序。
如您所见,守护程序层