定时执行任务的守护进程

     使用tail  -f /var/log/messages 查看执行情况
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <signal.h>
  7. #include <syslog.h>
  8. #define INTERVAL 3600*24
  9. void sigalrm_fn(int sig)
  10. {
  11.   static int count;
  12.   char *name="XinYiWuXian";
  13.   open(name,LOG_CONS|LOG_PID,LOG_USER);
  14.   syslog(LOG_INFO,"%d,log info...",++count);
  15.   closelog();
  16.   alarm(INTERVAL);
  17.   return;
  18. }
  19. int
  20. daemon(int nochdir,int noclose)
  21. {
  22.  pid_t pid;
  23.  pid=fork();
  24.  if(pid<0)
  25.    {
  26.      perror("fork");
  27.      return -1;
  28.    }
  29.  if(pid!=0)
  30.    { 
  31.      exit(0);
  32.    }
  33.   pid=setsid();
  34.   if(pid<-1)
  35.    {
  36.      perror("setsid");
  37.      return -1;
  38.    }
  39.   if(!nochdir)
  40.      chdir("/");
  41.   if(!noclose)
  42.     {
  43.       int fd;
  44.       fd=open("/dev/null",O_RDWR,0);
  45.       if(fd!=-1)
  46.       {
  47.         dup2(fd,STDIN_FILENO);
  48.         dup2(fd,STDOUT_FILENO);
  49.         dup2(fd,STDERR_FILENO);
  50.         if(fd>2)
  51.         close(fd);
  52.       }
  53.      }
  54.   umask(0027);
  55.   return 0;
  56. }
  57. int
  58. main(void)
  59. {
  60.   daemon(0,0);
  61.   signal(SIGALRM,sigalrm_fn);
  62.   alarm(5);
  63.   while(1)
  64.   {
  65.     pause();
  66.   }
  67.   return 0;
  68. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值