粉丝不过W

守护进程的基本概念

    Linux 或者 Unix 操作系统中,在系统引导的时候会开启很多服务,这些服务就叫做守护进程

      为增加灵活性, root 用户可以选择系统开启的模式,这些模式叫做运行级,每一种运行级以一定的方式配置系统

    守护进程是脱离于终端 且在后台运行的进程。守护进程 脱离终端为了避免进程在执行过程中产生的信息在任何终端上显示,另外进程也不会被任何终端所产生的信息所打断

     守护进程,也就是Daemon 进程,是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端且周期性地执行某种任务或等待处理某些发生的事件

      守护进程常常在系统引导装入时启动,在系统关闭时终止

      Linux 系统有很多守护进程,大多数服务都是通过守护进程实现的。同时,守护进程还能完成许多系统任务。如 计划任务进程 crond、 http 进程 httpd 等(这里的结尾字母 d 就是 Daemon 的意思)

       在 Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但 守护进程能够突破这种限制,它从被执行时开始运转,直到整个系统被关闭时才退出

        如果想让某个进程不因终端或其它的变化而受到影响,那么必须把这个进程变成一个守护进程

守护进程的工作方式

    守护进程的工作方式 为 独立运行(stand-alone)的工作方式和 xinetd 工作方式

      独立运行的守护进程

             独立运行的守护进程由 init 脚本负责管理,所有独立运行的守护进程的 init脚本存放在 /etc/rc.d/init.d 目录下

             系统服务都是独立运行的守护进程,如 syslogd和 cron 等

             独立运行的守护进程工作方式被称为: stand-alone,它是 Unix 传统的 C/S 模式的访问模式

             服务器(即,进程)监听(Listen)在一个特定的端口上等待客户端的联机。如 客户端产生一个连接请求,守护进程就创(Fork)一个子服务器(或,子进程)响应这个连接,而主服务器继续监听,并维持含有多个子服务器的子服务器池来等待下一个客户端请求

           stand-alone 模式的工作原理:

              工作在 stand-alone 模式下的网络服务有 route、 gated。在负载很大服务器上,都预先创建了子服务器,这样可以提高服务速度。在 Linux 系统中处于 stand-alone 工作模式的服务由/etc/rc.d/ rcN.d (N 是数字, 表示系统的运行级)目录中的符号链接文件启动

    xinetd 模式

         从守护进程的概念可看出,对于系统所提供的每一种服务,都必须运行一个监听某个端口的守护进程,意味着资源浪费

      为解决这个问题,Linux 引入了“ 网络守护进程服务 ”的概念。 Redhat Linux 使用的网络守护进程是 xinetd(eXtended Internet Daemon)。和 stand-alone 模式相比 xinetd 模式也称Internet Super-Server(超级服务器)

     xinetd 进程能 同时监听多个指定的端口,在接受用户请求时,它能根据用户请求端口的情况,启动不同的网络服务进程来处理这些用户请求。我们可以把 xinetd 进程看成一个管理启动服务的管理服务器,它决定把一个客户请求交给哪个程序处理,然后启动相应的守护进程,当处理完客户请求后,再关闭守护进程

   xinetd 模式工作原理:

      stand-alone 工作模式中,系统必使每一个网络服务器进程都监听其服务器端口。相比之下,运行单个 xinetd 进程就可以同时监听所有服务端口,这样就降低了系统开销,节省了系统资源 

       但是对于访问量大、经常出现并发访问, xinetd进程需要频繁启动对应的网络服务进程,反而会导致系统性能下降。一般来说系统一些负载高的服务如 sendmail、httpd 服务是单独启动的。xinetd守护进程也采取 stand-alone 工作模式。而其它服务类型都可以使用 xinetd 超级服务器管理

    pstree 查看系统当前运行的守护进程

用 nohup 命令创建守护进程

        在 Unix/Linux 中,普通进程可以用“ & ”符号放到后台运行,如果启动该进程的控制终端退出了,则该进程随即终止,因为普通进程不同于守护进程

      要实现守护进程,一种是按守护进程的规则去编程,比较麻烦;另一种是仍然用普通方法编程,然后用 nohup 命令去启动程序

     用 nonup 启动的程序所创建的进程,在控制终端退出后,进程仍在继续运行,起到了守护进程的作用(虽然它不是严格意义上的守护进程)

  nohup 命令的语法: nohup program [> file] &