什么是 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 的程序啰!

什么是 daemon相关推荐

  1. Docker使用遇到问题Got permission denied while trying to connect to the Docker daemon socket解决方案

    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker. ...

  2. linux系统安装deamonsync,DAEMON Sync的使用心得体会。简易版家庭云服务器!正是我要的那种...

    作为一个超级菜鸟,今天学会了自己建立一个简易的局域网云盘,以后就可以让家里人同步照片进电脑了!我的需求仅仅如此而已! (1)保证所有设备在同一局域网内.(我现在的理解就是在同一个路由器内,不知道是不是 ...

  3. python中的daemon守护进程实现方法

    守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.他们常常在系统引导装入时启动,在系统关闭时终止. 守护进程的特性 1.在后台运行 2.与其运行前的环境 ...

  4. 守护进程中创建的对象php,在PHP中生成守护进程(Daemon Process)

    前两天看到一篇文章<如何使用PHP编写daemon process>,其中对核心代码却没有细说,我又查了一些资料,还看了一本<理解Unix进程>,才搞明白生成守护进程的时候发生 ...

  5. 在Linux下编写Daemon

    在Linux下编写Daemon 转自:http://blog.163.com/prevBlogPerma.do?host=manyhappy163&srl=164476831201071811 ...

  6. android 内核 netlink 上报,Network Daemon(Android Netd)架构和源码分析

    平台: RK3066 ARM9双核 Android4.1 一 Network Daemon(netd)功能概述: Netd是Android的网络守护进程.NetD是个网络管家,封装了复杂的底层各种类型 ...

  7. linux下的daemon进程

    转自:http://www.cnblogs.com/xuxm2007/archive/2011/07/29/2121280.html #include <unistd.h> int dae ...

  8. Starting HAL daemon:[FAILED]

    因为优化系统关闭了一些服务,导致RHEL6系统在图形界面中鼠标和键盘不能使用,并且提示Starting HAL daemon:[FAILED] haldaemon:接受由udev通过D-BUS传递来的 ...

  9. 报错解决:Failed to talk to init daemon.

    早上在使用WSL的时候报错了: root@PC0:/home/zhang# systemctl start ssh.service System has not been booted with sy ...

  10. Python创建daemon

    参考<Linux/Unix 系统编程手册> 变成daemon,一个程序需要完成以下步骤: 1.执行一个fork(),父进程退出,子进程继续执行.(daemon成为了init进程的子进程) ...

最新文章

  1. 量子科技概念大火,国内现状如何?
  2. 华为鸿蒙无gms,无缘华为鸿蒙系统!荣耀手机海外官宣,全面拥抱谷歌服务
  3. 创业互联网公司如何搭建自己的技术框架
  4. 2016 年 3 月 TIOBE 编程语言排行榜
  5. 第三方登录之微信登录,基于ThinkSDK
  6. python进阶(第三章1) 字典
  7. 关于Acegi的详细信息(配置)
  8. ajax请求l类型,jquery 的ajax请求示例和注意事项
  9. TypeScript泛型约束
  10. stringWithUTF8String return null (返回null)的解决办法
  11. iOS build faad
  12. 【开发常识】手机号为什么要隐藏中间的四位数?
  13. 不加群就可以提取QQ群成员
  14. ASM 字节码插桩入门
  15. 解决iconfont 图标不显示问题
  16. 儿童机器人编程入门优先学习什么?
  17. 曲线的平滑和随机生成
  18. 《OpenCv视觉之眼》Python图像处理三 :Opencv图像属性、ROI区域获取及通道处理
  19. 《哪咤学python进阶篇》之选学案例三:白桦林的故事_(Python多媒体MV)
  20. django MVT模式介绍

热门文章

  1. Android开源项目分类整理
  2. 同学录 — 二叉树实现
  3. 渲染富文本编辑器并设置富文本编辑器的高度
  4. 使用iconfont阿里巴巴矢量图标库(最方便的使用方法)
  5. 优化高手都需要深入的访问路径(ACCESS PATH)
  6. 基于MATLAB的图像压缩感知
  7. 对数与指数操作:pow,log,sqrt,exp
  8. PCA变换与KL变换区别
  9. 虚拟办公室,产业创新与转型升级
  10. gappproxy教育网代理