zoukankan      html  css  js  c++  java
  • 守护进程

    守护进程

    Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。

    Linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等。

        创建守护进程,最关键的一步是调用setsid函数创建一个新的Session,并成为Session Leader。

    创建守护进程模型

    1. 创建子进程,父进程退出

    所有工作在子进程中进行形式上脱离了控制终端

    1. 在子进程中创建新会话

             setsid()函数

             使子进程完全独立出来,脱离控制

    1. 改变当前目录为根目录

             chdir()函数

             防止占用可卸载的文件系统

             也可以换成其它路径

    1. 重设文件权限掩码

             umask()函数

             防止继承的文件创建屏蔽字拒绝某些权限

             增加守护进程灵活性

    1. 关闭文件描述符

             继承的打开文件不会用到,浪费系统资源,无法卸载

    1. 开始执行守护进程核心工作
    2. 守护进程退出处理程序模型                                                                                                                                                                                                                                                                                                                                                                                                           【mydaemond.c】
      /***
      mydaemond.c
      ***/
      #include<stdio.h>
      #include<stdlib.h>
      #include<unistd.h>
      #include<fcntl.h>
      #include<sys/stat.h>
      
      void daemonize()
      {
          pid_t pid;
          if((pid == fork()) < 0)
          {
              perror("fork");
              exit(1);
          }
          else if(pid == 0)
          {
              exit(0);
          }
          setsid();
          if(chdir("/") < 0)
          {
              perror("chdir");
              exit(1);
          }
          umask(0);
          close(0);
      
          open("/dev/null",O_RDWR);
          dup2(0,1);
          dup2(0,2);
      }    
      
      int main()
       {
          daemonize();
          while(1);
          return 0;
       }
  • 相关阅读:
    05 . Python入门值循环语句
    04 . kubernetes资源清单YAML入门
    04 . Python入门之条件语句
    03 . Python入门之运算符
    05 . k8s实战之部署PHP/JAVA网站
    02 . Python之数据类型
    01 . Python简介
    04 . Mysql主从复制和Mycat读写分离
    03 . MysSQL权限和备份
    02 . Mysql基础操作及增删改查
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11347751.html
Copyright © 2011-2022 走看看