• linux下的守护进程daemon


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

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

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

        为什么要脱离终端?

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

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

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

        为什么要清掩码?

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

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

      

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

      -----

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

  • 相关阅读:
    杨中科 向HtmlAgilityPack道歉:解析HTML还是你好用
    感觉这个JQuery不错,查询方便
    数据库异步操作
    Command 设计模式
    osg 细节裁剪 SAMLL_FEATURE_CULLING
    errno错误代码
    清空std::stringstream
    eclipse android javabuilder +CDTbuilder
    mfc c++ system调用 控制台窗口
    Androidndkr8e wordlist 第二个参数不是数值参数
  • 原文地址:https://www.cnblogs.com/thammer/p/5758909.html
Copyright © 2020-2023  润新知