- 创建子进程,退出父进程(fork)
- 子进程创建新会话(setsid)
- 改变进程的工作目录(chdir)
- 指定文件掩码(unmask)
- 关闭文件描述符,或者重定向 /dev/null (dup2)
- 开始守护进程主逻辑
- 退出守护进程
#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#include<fcntl.h>int mydaemond(){pid_t pid,sid;pid=fork();if(pid>0){return 0;}sid=setsid();int ret=chdir("/home/lushuncheng");if(ret==-1){perror("chdir error");return 0;}umask(0002);close(STDIN_FILENO);int fd=open("/dev/null",O_RDWR);dup2(fd,STDOUT_FILENO);dup2(fd,STDERR_FILENO);}int main(){mydaemond(); //创建守护进程while(1){。//主逻辑}}
