免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1895 | 回复: 4
打印 上一主题 下一主题

关于守护进程的程序无法运行(新手) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:23 |只看该作者 |倒序浏览
为什么我把守护进程和获取时间封装成函数就不能实现?


//实现功能:每隔10s 写 日期时分秒 到log文件中
//
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <time.h>

#define LOG_FILE "log.txt"
#define MODE  "a+"

void Daemon()
{
  int i;
  const int MAXFD = 64;
  if(fork() != 0)
  {
    exit(0);
  }
  setsid();
  chdir("/");
  umask(0);
  for(i = 0; i < MAXFD; i ++)
  {
    close(i);
  }
}

void GetTime()
{
  FILE *fp = fopen(LOG_FILE, MODE);
  if(NULL == fp)
  {
    perror("fopen");
    return;
  }
  char *wday[] = {"Sum", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
  time_t timep;
  struct tm *p;
  time(&timep);
  p = localtime(&timep);
  fprintf(fp,"%d-%d-%d", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday);
  fprintf(fp,"%s%d:%d:%d---\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
  fclose(fp);
}
int main()
{
  int loop = 1000;
  Daemon();
  while(loop--)
  {
    GetTime();
    sleep(10);
  }
  return 0;
}

论坛徽章:
0
2 [报告]
发表于 2011-12-22 15:49 |只看该作者
本帖最后由 OriginateTPL 于 2011-12-22 15:53 编辑

首先没有引用
  1. #include <unistd.h>
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-12-22 16:30 |只看该作者
一般是fork两次吧

论坛徽章:
2
技术图书徽章
日期:2015-12-16 09:12:1619周年集字徽章-庆
日期:2019-09-12 16:09:19
4 [报告]
发表于 2011-12-23 11:32 |只看该作者
去掉daemon()函数看看. 或者 maxfd 的值改成用函数(getdtablesize())取得

论坛徽章:
0
5 [报告]
发表于 2011-12-23 23:07 |只看该作者
程序没问题,可以运行,log文件在/目录下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP