什么是 daemon

原创 2009年02月15日 12:25:00

什么是 daemon

如果您常常上网去查看一些数据的话,尤其是关于 Unix-Like 的相关操作系统,如 FreeBSD, Unix, Linux 等等,应该会常常听到 daemons 这个字眼,那么 daemon 是什么东西呀!?怎么这么常被见到?呵呵,Daemon 的字面上的意思就是『守护神、恶魔?』还真是有点奇怪呦! ^_^"" 。基本上,我们的 Linux 主机常常会收到一些要求,不论是来自本机系统的要求或者是网络 Client 端的服务要求,反正只要有要求来的时候,通常就是各式各样的 daemons 负责去唤起应该要工作的 Servers 来工作啦!那么 daemons 目前有两种基本的模式,分别是 stand_alone 与 super daemon 两种方式,底下就来说一说这两种 daemon 的工作型态:
  •  stand_alone : 就字面上的意思来说,stand alone 就是『独立的启动』的意思,也就是说,该 daemon 启动之后,就直接常驻在内存当中啰!他虽然会一直的占用系统的资源,但最大的优点就是,他会一直启动的啦!所以当有要求来的时候,他就会很快速的响应啰!常常用在这一种 daemon 的网络服务如常见的 httpd 这一个即是一例!
  • super daemon : 相对于 stand alone 的执行方式,这一种服务的启动方式则是藉由统一的一个 daemon 来负责唤起该服务!这一个统一负责的 daemon 就是 inet 这支服务啦!不过,在后来的 Linux 发展套件中,则是使用 xinet 这个设定啰!我们这里以 Mandrake 的 xinet 来做说明。当有网络的服务要求来的时候,该要求会先送给 xinet 这个服务,然后 xinet 根据该网络要求送来的数据封包的内容 ( 该内容会记录 IP 与 port ) 来将数据封包送给实际运作的服务!而该服务这个时候才会启动的!最常见到的就是 ftp 这支网络服务啦!这种最大的优点就是当没有数据封包来的时候,该服务不会一直占据系统资源 ( 该服务会在 sleeping 的状态吧! ) ,但是相对的,他的反应时间也会比较慢,因为还要花费一段时间去『唤醒』该服务呀!
那么这两种启动的方式哪一个比较好呢?见仁见智啦!而且还要看该主机的工作负荷与实际的用途说!例如当你的主机是用来作为 WWW 服务器的,那么 httpd 自然就以 stand alone 的启动方式较佳!事实上,我们常常开玩笑的说明 stand alone 与 super daemon 的情况,可以银行的窗口来作为说明的范例!
  • stand alone : 在银行里面,假设有一种单一服务的窗口,例如存钱窗口,所以,当你需要存钱的时候,直接前往该窗口,就有『专人』为您服务啦!
  • super daemon : 在银行里面假设还有另外一种复合型态的窗口,同时提供转帐、资金调度、提款等等的业务,那当你需要其中一项业务的时候,就需要前往该窗口,但是坐在窗口的 这个营业员,拿到你的需求单之后,往后面一丢『喂!那个转帐的仁兄!该你的工作了』那么那个仁兄就开始工作去!然而里头还有资金调度与提款等负责业务的仁 兄呢?他们在干嘛?嘿嘿!看看报、喝喝茶啰!那么这里就会引出另外一个问题啦!假设银行今天的人潮特别的汹涌,所以这个窗口后面除了你之外还有很多的人! 那么想一想,这个窗口是要『一个完成再来下一个』还是『全部都把你们的单据拿来,我全部处理掉』呢?呵呵!是不是不太一样?
    • multi-threaded:就是我们提到的,全部的客户之要求都给他拿来,一次给他交办下去,所以一个服务同时会负责好几个程序。
    • single-threaded:这个就是目前我们『人类的银行』最常见的方式啦,不论如何,反正一个一个来,第一个没有处理完之前,后面的请排队!嘿嘿!所以如果 client 的要求突然大增的话,那么这些晚到的 client 可得等上一等!

  •    
另外,需要注意的是,既然银行里头有这两种窗口同时存在,所以啰,在 Linux 系统里面,这两种 daemon 是可以同时存在的啦!也就是说,某些服务可以使用 stand alone 来启动,而有其它的服务则可以使用 xinet ( 或者是 inet ) 大致的情况就是这样啦!了呼!?

  • /etc/services
    • 请特别注意!虽然有的时候您可以藉由修改 /etc/services 来更改一个服务的 port 号,不过并不建议如此做,因为很有可能会造成一些协议的错误情况!这里特此说明一番呦!(除非您要架设一个地下网站,否则的话,使用 /etc/services 原先的设定就好啦!)

  • OK!这个时候就又发生了另一个问题啰!那么我怎么知道要将我的数据送到那个窗口去!咦!那个窗口不是有写说明说他是干嘛用的吗?所以你要存钱、转帐、或者是进行汇款,都可以在不同的窗口来完成,那么换到实际的网络情况来说呢,因为我们的 TCP 封包里面含有 port 与 IP 对吧!将那些已经监听的 port 想成是这些窗口,如此一来你的 TCP 封包便可以依据不同的需求,而到达不一样的 port 来索取服务了!因此,你的联机是 FTP, WWW, smtp 等等都好,绝对不会被搞错啦!
     
    好了,如果我想要知道这个 port 是由那个服务所启动的呢?在 Linux 系统里面有个档案在说明那个窗口与服务的  ( services and ports ) 对应!呵呵!那就是鼎鼎大名的 /etc/services 这个档案啦!我们取一段常常看到的 port 与相关服务的区段来看一下好了!
     
    [root @test root]# vi /etc/services
    .... 略
    ftp-data        20/tcp
    ftp-data        20/udp
    ftp             21/tcp
    ftp             21/udp
    ssh             22/tcp                          # SSH Remote Login Protocol
    ssh             22/udp                          # SSH Remote Login Protocol
    telnet          23/tcp
    telnet          23/udp
    smtp            25/tcp          mail
    smtp            25/udp          mail
    nameserver      42/tcp          name            # IEN 116
    nameserver      42/udp          name            # IEN 116
    domain          53/tcp          nameserver      # name-domain server
    domain          53/udp          nameserver
    .... 略
    <daemon name>   <port 与型态>   < 该服务的说明 >

    像上面说的是,第一栏为 daemon 的名称、第二栏为该 daemon 所使用的 port 号码与其网络数据封包传送时候的类型,主要为较稳定的 tcp 封包与较易破损但较快速之 udp 封包!举个例子说,那个 e-mail 的发信协议为 smtp 这个服务,而这个服务的使用之 port 即为 25 啦!就这样!
     

  • Daemon 的命名规则:

  • 每一个服务的开发者,当初在开发他们的服务时,都有特别的故事啦!不过,无论如何,这些服务的名称被建立之后,被挂上 Linux 使用时,通常在服务的名称之后会加上一个 d ,例如例行性命令的建立的 at, 与 cron 这两个服务,通常会被称为 atd 与 crond,这个 d 代表的就是 daemon 的意思。所以,在资源管理那一章中,我们使用了 ps 与 top 来观察程序时,都会发现到很多的 xxxd 的程序,呵呵!通常那就是一些 daemon 的程序啰!

相关文章推荐

nginx学习十三 初始fork和nginx守护进程ngx_daemon

学习nginx已经有一个多月了,觉得越来越吃力了,主要原因自己总结了一下:1平台是基于linux的,以前几乎没有接触过linux,而nginx使用了很多linux的函数;2就是进程,这个东西接触的也很...

C++实现Windows下的Daemon,监控多个进程

在windows下,可以用简单的bat实现守护进程的功能,如果dump掉就重新拉起来,百度下就能查到,举个例子: @echo off ::检测时间间隔,单位:秒 set _interval=5 ...

Linux系统服务——Daemon

什么是Daemon?Daemon是Linux的一些系统服务,它们是一些常驻内存的进程。Daemon分类Daemon拥有两种分类方式,按照“daemon是否可以在内存中独立启动”可以分为:stand a...

管理Tomcat服务的Daemon脚本

一、脚本功能 # tomcat 的启动,重启,实时查看日志 #!/bin/bash   # funtions:  # chkconfig: 345 80 15   # description: Mul...

CentOS5.5 默认基本服务详解 avahi-daemon

CentOS5.5 默认基本服务详解 服务名称 功能 默认 建议 备注 NetworkManager 用于自动连接网络 关闭 关闭 对服务器没用 ...
  • inthat
  • inthat
  • 2012年12月29日 09:37
  • 10058

【Linux编程】守护进程(daemon)详解与创建

本文主要参考自:linux系统编程之进程(八):守护进程详解及创建,daemon()使用 一、概述 Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地...

java多线程之守护线程(daemon thread)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/42402657 作者:小马 daemon是相于user线程而言的,可以...

Linux下编写脚本实现Daemon

在Linux(以Redhat Linux Enterprise Edition 5.3为例)下,有时需要编写Service。Service也是程序,一般随系统启动用户不干预就不退出的程序,可以称为...

Linux下Service守护进程开发和Shell脚本控制Daemon

在我开发Android的过程中遇到Service组件简单的将就是不需要界面的背后进程,默默执行任务。现在我们学习一下Linux下守护进程Service是怎么实现的,也同时学习一下通过shell脚本来控...
  • szqsdq
  • szqsdq
  • 2015年10月26日 17:42
  • 942

Oracle 12c以下版本RAC与Redhat Linux的avahi-daemon服务的水火不容

对于Redhat Linux的avahi-daemon服务,Oracle官方开发人员建议如下:  (1)     Avahi (avahi-daemon) is a freeimplementatio...
  • lk_db
  • lk_db
  • 2016年05月12日 10:50
  • 1422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:什么是 daemon
举报原因:
原因补充:

(最多只允许输入30个字)