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

    守护进程

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

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

    创建守护进程模型

    1. 创建子进程,父进程退出  fork()

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

        2.在子进程中创建新会话    setsid()

         setsid()函数

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

        3.改变当前目录为根目录   chdir()

         chdir()函数

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

         也可以换成其它路径

        4.重设文件权限掩码    umask()

         umask()函数

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

         增加守护进程灵活性

        5.关闭文件描述符    将0/1/2重定向 /dev/null    dup2()

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

        6.开始执行守护进程核心工作

        7.守护进程退出处理程序模型

    #include <stdio.h>
    
    int main(void)
    {
        pid_t pid, sid;
        int ret, fd;
        pid = fork();
        if(pid > 0)   
        {
            return 0;
        }
        sid = setsid();
        ret = chdir("目录");
        if(ret < 0)
        {
            perror("chdir error");
            exit(0);
        }
        umask(0002);
    
        close(STDIN_FILENO);
        fd = open("/dev/null", O_RDWR);
        dup2(0, STDOUT_FILENO);
        dup2(0, STDERR_FILENO);
        return 0;
    }
  • 相关阅读:
    用Sqoop进行Hive和MySQL之间的数据互导
    Spark读HBase写MySQL
    Kafka如何彻底删除topic及数据
    LDAP-HA安装与配置(Keepalived方式实现)
    配置两个Hadoop集群Kerberos认证跨域互信
    MYSQL HA 部署手册
    ELK简单安装测试
    Elasticsearch CURL命令
    大数据常见错误解决方案(转载)
    生成 RSA 公钥和私钥的方法
  • 原文地址:https://www.cnblogs.com/lr1402585172/p/10571192.html
Copyright © 2011-2022 走看看