zoukankan      html  css  js  c++  java
  • linux下的守护进程daemon

      什么是守护进程?其实感觉守护进程并没有什么明确的定义,只是守护进程有一些特征,这是它需要遵循的。

      守护进程的第一个特征是长时间在后台运行的程序,并且主要是为了提供某种服务,而为了能够让服务尽可能随时都可用,就要求这个服务是一直运行的,于是守护进程就守护着这个服务不挂掉。linux里面常见的守护进程一般都是以d结尾的,比如apache的httpd,samba的smbd,ssh的sshd。

      它的第二个特征是与启动它的进程的环境隔离,包括关闭它打开的所有文件描述符,终端,会话,进程组,某些环境变量(如工作目录),文件掩码。

        为什么要脱离终端?

          如果它不脱离终端,那么就有可能收到来自终端的信号,比如SIGINT(Ctrl+c,会被发往所有前台进程组的进程,它的默认行为就是结束进程),SIGHUP(会被发往会话首进程)。

        为什么要关闭它打开的所有文件描述符?

          如果创建它的进程之前打开了某个文件,然后创建这个守护进程,这样子进程就继承了fd,如果守护进程不关闭这个fd,一个是会占用资源,二个我猜测和改变工作目录一样,如果这个文件是位于挂载目录,那么就无法umount了。

        为什么要清掩码?

          这是因为假设它的父进程之前对掩码做过特殊设置,守护进程作为子进程会继承这个,那么它创建文件时,因为掩码的缘故,文件的权限就可能和实际设置的不一致。

      第三个特征,守护进程通常由启动脚本启动

      

      来自APUE守护进程章节例子,将一个进程守护化的代码:

      -----

      或者使用Linux的现成函数,daemon。

  • 相关阅读:
    JobHistory搜索智能化
    JobHistory搜索智能化
    JobHistory搜索智能化
    Hadoop Ls命令增加显示条数限制参数
    Hadoop Ls命令增加显示条数限制参数
    Markdown的简单用法
    Markdown常用编辑器
    搜索引擎的使用
    avalon.js 文字显示更多与收起
    浏览器访问网页的详细内部过程
  • 原文地址:https://www.cnblogs.com/thammer/p/5758909.html
Copyright © 2011-2022 走看看