Linux 守护进程出错处理

出错处理
守护进程完全脱离了终端,因此不能只是写到标准出错上.通常使用的方法是使用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); 

         }  

    }          
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
本文转自凌众科技技术文章中心 http://www.lingzhong.cn ,转载请注明出处。
Linux 守护进程出错处理 http://www.lingzhong.cn/tech/20376.htm

原文地址:https://www.cnblogs.com/nufangrensheng/p/2940056.html