守护进程

2022-09-27  本文已影响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();
    /* 守护进程功能实现 :创建一个文件作为项目日志文件,当前时间写入到日志文件中 */
}
上一篇下一篇

猜你喜欢

热点阅读