Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291232
  • 博文数量: 109
  • 博客积分: 2116
  • 博客等级: 大尉
  • 技术积分: 1062
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-22 15:38
文章分类

全部博文(109)

文章存档

2013年(2)

2011年(16)

2010年(90)

2009年(1)

我的朋友

分类: LINUX

2010-07-09 11:20:39

守护进程脱离终端控制,在调试时候造成一定不便。可以用syslog服务把程序出错信息输入日志文件中。从而可以看出问题所在。

把上次的程序用日志方式改写。

主要用到三个函数:syslogopenlogcloselog

守护进程的写法不变,加入日志服务。

代码来自华清远见:

#include

#include

#include

#include

#include

#include

#include

#include

 

int main()

{

    pid_t pid, sid;

    int i, fd;

    char *buf = "this is a daemon!\n";

 

    pid = fork();//创建子进程,父进程退出

    if(pid < 0)

    {

        printf("error fork!\n");

        exit(1);

    }

    else if(pid > 0)

    {

        exit(0);

    }

   

//  setsid();//子进程中创建新会话

//  chdir("/");//改变当前目录为根目录

    openlog("daemon_syslog", LOG_PID, LOG_DAEMON);//打开日志服务

    if((sid = setsid()) < 0)

    {

        syslog(LOG_ERR, "%s\n", "setsid");//向日志中写入

        exit(1);

    }

 

    if((sid = chdir("/")) < 0)

    {

        syslog(LOG_ERR, "%s\n", "chdir");//向日志中写入

                exit(1);

    }

    umask(0);//重新设置文件权限

    for(i = 0; i < getdtablesize(); i++)//关闭文件描述

    {

        close(i);

    }

    //创建完成正式开始守护进程工作

    while(1)

    {

        if((fd = open("/tmp/daemon.log", O_CREAT|O_WRONLY|O_APPEND, 0600)) < 0){

            syslog(LOG_ERR, "open");

            exit(1);

        }

        write(fd, buf, strlen(buf) + 1);

        close(fd);

        sleep(10);

    }

    closelog();//关闭系统日志服务

    exit(0);

}

实验结果如下:

阅读(920) | 评论(0) | 转发(0) |
0

上一篇:守护进程

下一篇:阻塞与非阻塞

给主人留下些什么吧!~~