Linux 守护进程

1. 概述
守护进程(精灵进程)是一种生存期长的进程。
<1> 通常在系统引导装入时启动,在系统关闭时终止。
<2> 没有控制终端,在后台运行。

2 一些特征
<1> 所有守护进程都以超级用户(ROOT 用户ID为0)的优先权运行,
<2> 除update以外,所有守护进程都是进程组和会话期的首进程
<3> 所有守护进程的父进程都是init进程

3编程规则
<1>调用fork,结束父进程。
   ·若该守护进程由shell命令启动,那么父进程终止后,shell认为命令结束,终端停止。
   ·子进程继承父进程的进程组ID,使得子进程不是一个进程组的首进程。
<2>调用setsid创建一个新的会话期。
·使子进程成为新会话期的首进程,
·成为一个新进程组的首进程,
·没有控制终端
<3>将当前工作目录改为系统根目录
  ·当前工作目录由父进程继承而来
  ·若当前目录在一个装配文件系统中,则该文件系统不能被拆卸,因此需要更改当前目录。
  ·也可当当前工作目录修改为其他目录
<4>将文件方式创建屏蔽字设置为0
  ·文件方式创建屏蔽字有父进程继承的来
  ·此屏蔽可能会拒绝某些许可的创建,因此设置为0
<5>关闭不再需要的文件描述符

举例:

 

  
  
  
  
  1. #include<sys/types.h> 
  2. #include<sys/stat.h> 
  3. #include<signal.h> 
  4. #include<unistd.h> 
  5. #include<stdio.h> 
  6. #include<stdlib.h> 
  7.  
  8.  
  9.  
  10. #include<stdio.h> 
  11. #include<stdlib.h> 
  12. #include<sys/types.h> 
  13. #include<sys/stat.h> 
  14. #include<signal.h> 
  15. #include<fcntl.h> 
  16. #include <syslog.h> 
  17.  
  18. #define MAXF 10000 
  19. int main() 
  20. {    
  21.     int i,fd; 
  22.     pid_t pid; 
  23.  
  24.     pid=fork();/*<1> 创建子进程,结束父进程*/ 
  25.     if(pid<0) 
  26.              perror("fork error!\n"); 
  27.         else if(pid>0)/*父进程*/ 
  28.         exit(0); 
  29.  
  30.      
  31.     setsid();/*<2>创建会话期,进程成为新的会话组长和新的进程组长*/ 
  32.     chdir("/");/*<3>更改当前工作目录*/ 
  33.     umask(0);/*<4>设置文件权限*/ 
  34.     for(i=1;i<MAXF;i++)/*<5>关闭文件描述符*/ 
  35.     close(i); 
  36.      
  37.     /*每5秒,写入文件一次*/ 
  38.  
  39.     while(1) 
  40.     { 
  41.         if((fd=open("/tmp/proc.log",O_CREAT|O_WRONLY|O_APPEND))<0) 
  42.              { 
  43.              perror("open error!\n"); 
  44.               exit(0); 
  45.              } 
  46.              write(fd,"Hi dameon!\n",12); 
  47.              close(fd); 
  48.         sleep(5);     
  49.     } 
  50.   
  51.      

结果:

cat命令查看/tmp/proc.log,每5秒会写入一次 Hi dameon!

若要关闭此守护进程,使用ps -e查看,再kill关闭即可

你可能感兴趣的:(linux,守护进程,LINUX进程,休闲,xx)