Linux 守护进程及系统日志

pid_t setsid(void);

void openlog(const char *ident, int option, int facility);

void syslog(int priority, const char *format, ...);

void closelog(void);

创建守护进程及系统日志

例程:mydaemon.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <syslog.h>
#include <errno.h>
#include <string.h>

static int deaminize(void)  //创建守护进程
{
  int fd;
  pid_t pid;

  pid = fork();       //创建子进程
  if(pid <0)
    return -1;
  else if(pid >0)   //父进程正常退出
    exit(0);

  fd = open("/tmp/mystdout",O_RDWR);  //打开一个文件
  if(fd <0)
    return -2;

  dup2(fd,0);  //将标准输如映射到fd
  dup2(fd,1);  /将标准输出映射到fd
  dup2(fd,2);  /将标准输错误映射到fd

  pid = setsid();  //创建守护进程
  if(pid == (pid_t) -1)
    return -3;

  chdir("/");   //更改进程执行目录
  umask(0);  //更改umask值禁止创建文件

  return 0;
}

int main()
{
  FILE *fp;
  int i=0,ret;

  openlog("mydaemon",LOG_PID,LOG_DAEMON);  //设置系统日志
  ret = deaminize();  //创建守护进程
  if(ret)
  {
    syslog(LOG_ERR,"ret:%d",ret);    //输出系统日志
    exit(1);
  }

  fp = fopen("/tmp/out","w");  //打开文件
  if(fp ==NULL)
  {
    syslog(LOG_ERR,"fopen():%s",strerror(errno)); //输出系统日志
    exit(1);
  }

  while(1)
  {
    fprintf(fp,"%d\n",i);  //向文件中写入数据
    i++;
    fflush(fp);  //刷新数据流
    sleep(1);
  }

  fclose(fp);
  closelog();
  exit(0);
}

posted @ 2022-07-15 15:56  *^VV^*  阅读(107)  评论(0编辑  收藏  举报