守护进程

来源:互联网 发布:max384灯控台编程教程 编辑:程序博客网 时间:2024/04/20 04:55

/*如果你在 DOS 时代编写过程序,那么你也许知道在 DOS 下为了编写一个常驻内存的
程序我们要编写多少代码了.相反如果在 Linux 下编写一个"常驻内存"的程序却是很容易的.
我们只要几行代码就可以做到. 实际上由于 Linux 是多任务操作系统,我们就是不编写代码
也可以把一个程序放到后台去执行的.我们只要在命令后面加上&符号 SHELL 就会把我们的
程序放到后台去运行的. 这里我们"开发"一个后台检查邮件的程序.这个程序每个一个指
定的时间回去检查我们的邮箱,如果发现我们有邮件了,会不断的报警(通过机箱上的小喇
叭来发出声音). 后面有这个函数的加强版本加强版本
后台进程的创建思想: 首先父进程创建一个子进程.然后子进程杀死父进程(是不是很无
情?). 信号处理所有的工作由子进程来处理
程序功能,检测邮件,并提示新邮件,邮件路径:/var/spool/mail/root*/

      1 #include <unistd.h>
      2 #include <sys/types.h>
      3 #include <sys/stat.h>
      4 #include <stdio.h>
      5 #include <errno.h>
      6 #include <fcntl.h>
      7 #include <signal.h>
      8 #include <stdlib.h>
      9 #define MAIL "/var/spool/mail/root"/*linux default email address is /var/spool/mail/userName*/
     10 #define SLEEP_TIME 1
     11 main(void)
     12 {
     13     pid_t child;
     14     if((child=fork())==-1)
     15     {
     16         printf("Fork Error: %s/n",strerror(errno));
     17         exit(1);
     18     }
     19     else if (child >= 0)
     20         while(1);
     21     if(kill(getppid(),SIGTERM)==-1)/*杀死父进程,否则不能常驻内存,*/
     22     {
     23         printf("Kill Parent Error: %s/n",strerror(errno));
     24         exit(1);
     25     }
     26     {
     27     int mailfd;
     28     while(1)
     29     {
     30         if((mailfd=open(MAIL,O_RDONLY))!=-1)
     31         {
     32             fprintf(stderr,"%s","/007");
     33             close(mailfd);
     34         }
     35         sleep(SLEEP_TIME);
     36     }
     37     }
     38 }