• Linux 守护进程出错处理


    http://www.cnblogs.com/nufangrensheng/archive/2013/03/02/2940056.html

    出错处理
    守护进程完全脱离了终端,因此不能只是写到标准出错上.通常使用的方法是使用syslog服务,将出错信息输入到”/var/log/message”系统日志文件中去.Syslog是Linux中的系统日志管理服务,通过守护进程syslogd来维护.
    处理过程
    <1>打开syslog
    <2>写入日志
    <3>关闭syslog
    头文件
    #include <syslog.h>
    函数原型:
    void openlog(char *ident, int option, int facility) ;
    参数:
    ident为自定义标识符,
    option如下
    LOG_CONS
    若日志消息,不能通过U N I X域数据报发送至s y s l o g d,则将该消息写至控制台
    LOG_NDELAY1
    立即打开U N I X域数据报套接口至s y s l s g d精灵进程—不要等到记录第一条消息.
    通常,在记录第一条消息之前,该套接口不打开
    L O G_ P E R R O R
    除将日志消息发送给s y s l o g外,还将它写至标准出错.
    L O G _ P I D
    每条消息都包含进程I D此选择项可供对每个请求都f o r k一个子进程的精灵进程使用
    facility
    设置f a c i l i t y参数的目的是让配置文件可以说明,来自不同设施的消息以不同的方式进行处理
    LOG_A U T H 授权程序: l o g i n . s u , g e t t y ,⋯
    LOG_C R O N c r o n和a t
    LOG_D A E M O N 系统精灵进程:f t p d , r o u t e d ,⋯
    LOG_K E R N 内核产生的消息
    LOG_L O C A L 0 保留由本地使用
    LOG_L O C A L 1 保留由本地使用
    LOG_L O C A L 2 保留由本地使用
    LOG_L O C A L 3 保留由本地使用Empire CMS,phome.net

    LOG_LO C A L 4 保留由本地使用
    LOG_LOCAL5 保留由本地使用
    LOG_LOCAL6 保留由本地使用
    LOG _LOCAL7 保留由本地使用
    LOG _L P R 行打系统:lpd, lpc, ⋯
    LOG_ M A I L 邮件系统
    LOG_ N E W S U s e n e t网络新闻系统
    L O G_ S Y S L O G s y s l o g d精灵进程本身
    L O G _U S E R 来自其他用户进程的消息
    L O G _U U C P U U C P系统
    void syslog(int priority, char * format, ...);
    参数:类似于printf(),只是将输出换成了系统日志
    priority参数是f a c i l i t y和l e v e l的组合
    l e v e l:
    L O G _E M E R G 紧急(系统不可使用) (最高优先级)
    L O G _A L E R T 立即修复的条件
    L O G _C R I T 临界条件(例如,硬设备出错)
    L O G _E R R 出错条件
    L O G _W A R N I N G 警告条件
    L O G _N O T I C E 正常,但重要的条件
    L O G _I N F O 信息性消息
    L O G _D E B U G 调试排错消息(最低优先级)
    举例
    #include<stdio.h> 

    #include<stdlib.h> 

    #include<sys/types.h> 

    #include<sys/stat.h> 

    #include<signal.h> 

    #include<fcntl.h> 

    #include <syslog.h> 

    #define MAXF 10000

      int main()

      {        

               int i,fd; 

                pid_t pid;   

               /*(1)openlog也可省略*/   

               openlog("my_log",LOG_PID,LOG_DAEMON);

              pid=fork();

              /*<1> 创建子进程,结束父进程*/ 

             if(pid<0)  

                 perror("fork error!\n"); 

             else if(pid>0)

            /*父进程*/

                  exit(0); 

            setsid();/*<2>创建会话期,进程成为新的会话组长和新的进程组长*/

            chdir("/");/*<3>更改当前工作目录*/

            umask(0);/*<4>设置文件权限*/

           for(i=1;i<MAXF;i  )/*<5>关闭文件描述符*/  

                    close(i); 

               /*每5秒,写入文件一次*/  

          while(1) 

         {                  /*(2) syslog写入/var/log/syslog 文件中*/ 

                    syslog(LOG_ERR,"%s\n","****----open error----****\n"); 

                  sleep(5); 

             }  

        }          

  • 相关阅读:
    Python 3.8六大新功能
    不小心删除/etc/passwd文件怎么办
    python干货三例(需基础) ​​​​
    程序员喜爱的七款热门Linux系统介绍(附下载地址)
    零代码时代即将到来?没那么简单
    来说说成功的云迁移的10个经验教训
    日本已开始提供10Gbps万兆光纤接入服务
    微软:将向安卓和苹果iOS平台推出杀毒软件Defender
    有jQuery背景,该如何用AngularJS编程思想?
    自用迷你版的Deferred
  • 原文地址:https://www.cnblogs.com/spinsoft/p/2940066.html
Copyright © 2020-2023  润新知