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

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
/* Linux 的默任个人的邮箱地址是 /var/spool/mail/用户的登录名 */
#define MAIL "/var/spool/mail/hoyt"
/* 睡眠10 秒钟 */
#define SLEEP_TIME 10
int main(int argc,char **argv)
{
pid_t child;
if((child=fork())==-1)
{
printf("Fork Error:%s\n",strerror(errno));
exit(1);
}
else if(child>0)
while(1);
if(kill(getppid(),SIGTERM)==-1)
{
printf("Kill Parent Error:%s\n",strerror(errno));
exit(1);
}
else
{
int mailfd;
while(1)
//13
{
    /*
if((mailfd=open(MAIL,O_RDONLY))!=-1)
{
fprintf(stderr,"%s","\007");
close(mailfd);
}
*/
static int counter=0;
printf("%d\n",++counter);
sleep(SLEEP_TIME);
}
}
}