编写守护进程的步骤:
1、创建子进程,父进程退出。
2、在子进程中创建新会话。
setsid();
3、改变当前目录为根目录。
chdir("/");
4、重设文件权限掩码。
umask(0);
5、关闭文件描述符。
for(i = 0; i < getdtablesize(); i++) /* 第五步 */
{
close(i);
}
代码分析;
/* daemon.c创建守护进程实例 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> int main() { pid_t pid; int i, fd; char* buf = "This is a Daemon\n"; pid = fork(); /* 第一步 */ if(pid < 0) { printf("Error fork\n"); exit(1); } else if(pid > 0) { exit(0); /* 父进程退出 */ } setsid(); /* 第二步 */ chdir("/"); /* 第三步 */ umask(0); /* 第四步 */ for(i = 0; i < getdtablesize(); i++) /* 第五步 */ { close(i); } /* 这时创建完守护进程,以下开始正式进入守护进程工作 */ while(1) { if((fd = open("/tmp/daemon.log", O_CREAT | O_WRONLY | O_APPEND, 0600)) < 0) { printf("Open file error\n"); exit(1); } write(fd, buf, strlen(buf) + 1); close(fd); sleep(10); } return 0; }
时间: 2024-10-10 21:41:52