守护进程

守护进程是一种生命周期较长的进程,它常在系统自举时开始,然后在系统关闭是结束。
    
  1. #include"unpipc.h"
  2. int main(){
  3. int i,fd0,fd1,fd2;
  4. pid_t pid;
  5. struct rlimit rl;
  6. struct sigaction sa;
  7. umask(0);
  8. if(getrlimit(RLIMIT_NOFILE,&rl)<0){
  9. sys_err("getrlimit error");
  10. }
  11. if((pid=fork())<0){
  12. sys_err("fork error");
  13. }else if(pid!=0){
  14. exit(0);
  15. }
  16. setsid();
  17. sa.sa_handler=SIG_IGN;
  18. sigemptyset(&sa.sa_mask);
  19. if(sigaction(SIGHUP,&sa,NULL)<0){
  20. sys_err("sigaction error");
  21. }
  22. if((pid=fork())<0){
  23. sys_err("fork error");
  24. }else if(pid!=0){
  25. exit(0);
  26. }
  27. if(chdir("/")<0){
  28. sys_err("chdir error");
  29. }
  30. if(rl.rlim_max==RLIM_INFINITY){
  31. rl.rlim_max=1024;
  32. }
  33. for(i=0;i<rl.rlim_max;i++){
  34. close(i);
  35. }
  36. fd0=open("/dev/null",O_RDWR);
  37. fd1=dup(fd0);
  38. fd2=dup(fd1);
  39. if(fd0!=0||fd1!=1||fd2!=2){
  40. sys_err("dup error");
  41. }
  42. }





原文地址:https://www.cnblogs.com/yml435/p/4655452.html