1. 创建子进程,退出父进程(fork)
    2. 子进程创建新会话(setsid)
    3. 改变进程的工作目录(chdir)
    4. 指定文件掩码(unmask)
    5. 关闭文件描述符,或者重定向 /dev/null (dup2)
    6. 开始守护进程主逻辑
    7. 退出守护进程
      1. #include<stdio.h>
      2. #include<sys/types.h>
      3. #include<sys/stat.h>
      4. #include<unistd.h>
      5. #include<fcntl.h>
      6. int mydaemond()
      7. {
      8. pid_t pid,sid;
      9. pid=fork();
      10. if(pid>0)
      11. {
      12. return 0;
      13. }
      14. sid=setsid();
      15. int ret=chdir("/home/lushuncheng");
      16. if(ret==-1)
      17. {
      18. perror("chdir error");
      19. return 0;
      20. }
      21. umask(0002);
      22. close(STDIN_FILENO);
      23. int fd=open("/dev/null",O_RDWR);
      24. dup2(fd,STDOUT_FILENO);
      25. dup2(fd,STDERR_FILENO);
      26. }
      27. int main()
      28. {
      29. mydaemond(); //创建守护进程
      30. while(1)
      31. {
      32.         //主逻辑
      33. }
      34. }