美文网首页
守护进程

守护进程

作者: 二进制人类 | 来源:发表于2022-09-27 10:56 被阅读0次

    步骤

    1. 创建一个子进程,父进程退出,脱离父进程所依赖的终端。

    2. 创建一个新的会话

      1. 进程组:就是多个进程的集合;
      2. 会话:是多个进程组的集合;
    3. 修改工作目录:一般情况下可以修改为根目录(/)或者/tmp

    4. 改变文件权限掩码:umask值

    5. 关闭进程中所有已打开文件的文件描述符;

    实例

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    int DaemonInit(void)
    {
        int ret;
        pid_t pid;
        /* 1. 创建子进程,父进程退出 */
        pid = fork();
        if (pid == -1)
        {
            perror("fork");
            return -1;
        }
        else if(pid != 0)
        {
            exit(EXIT_SUCCESS);
        }
        /* 2. 创建新的会话 */
        pid = setsid();
        if (pid == -1)
        {
            perror("setpid");
            return -1;
        }
        /* 3. 修改工作目录 */
        ret = chdir("/tmp");
        if (ret == -1)
        {
            perror("chdir");
            return -1;
        }
        /* 4. 修改文件权限掩码 */
        umask(0);
        /* 5. 关闭进行中所有已打开文件的文件描述符 */
        int num = getdtablesize();
        int fd;
        for (fd = 0; fd < num; fd++)
            close(fd);
        return 0;
    }
    
    int main()
    {
        DaemonInit();
        /* 守护进程功能实现 :创建一个文件作为项目日志文件,当前时间写入到日志文件中 */
    }
    

    相关文章

      网友评论

          本文标题:守护进程

          本文链接:https://www.haomeiwen.com/subject/zpkqartx.html