进程的守护进程的用法
编写守护进程的步骤:
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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了