守护进程
2022-09-27 本文已影响0人
二进制人类
步骤
-
创建一个子进程,父进程退出,脱离父进程所依赖的终端。
-
创建一个新的会话
- 进程组:就是多个进程的集合;
- 会话:是多个进程组的集合;
-
修改工作目录:一般情况下可以修改为根目录(/)或者/tmp
-
改变文件权限掩码:umask值
-
关闭进程中所有已打开文件的文件描述符;
实例
#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();
/* 守护进程功能实现 :创建一个文件作为项目日志文件,当前时间写入到日志文件中 */
}