进程控制开发之:Linux守护进程

时间:2013-09-13来源:网络

7.3.3守护进程的出错处理

读者在前面编写守护进程的具体调试过程中会发现,由于守护进程完全脱离了控制终端,因此,不能像其他普通进程一样将错误信息输出到控制终端来通知程序员,即使使用gdb也无法正常调试。那么,守护进程的进程要如何调试呢?一种通用的办法是使用syslog服务,将程序中的出错信息输入到系统日志文件中(例如:“/var/log/messages”),从而可以直观地看到程序的问题所在。

注意

“/var/log/message”系统日志文件只能由拥有root权限的超级用户查看。在不同Linux发行版本中,系统日志文件路径全名可能有所不同,例如可能是”/var/log/syslog”

syslog是Linux中的系统日志管理服务,通过守护进程syslogd来维护。该守护进程在启动时会读一个配置文件“/etc/syslog.conf”。该文件决定了不同种类的消息会发送向何处。例如,紧急消息可被送向系统管理员并在控制台上显示,而警告消息则可被记录到一个文件中。

该机制提供了3个syslog相关函数,分别为openlog()、syslog()和closelog()。下面就分别介绍这3个函数。

(1)syslog相关函数说明。

通常,openlog()函数用于打开系统日志服务的一个连接;syslog()函数是用于向日志文件中写入消息,在这里可以规定消息的优先级、消息输出格式等;closelog()函数是用于关闭系统日志服务的连接。

(2)syslog相关函数格式。

表7.9列出了openlog()函数的语法规范。

表7.9 openlog()函数语法

所需头文件

#includesyslog.h>

函数原型

voidopenlog(char*ident,intoption,intfacility)

函数传入值

ident

要向每个消息加入的字符串,通常为程序的名称

option

LOG_CONS:如果消息无法送到系统日志服务,则直接输出到系统控制终端

LOG_NDELAY:立即打开系统日志服务的连接。在正常情况下,直接发送到第一条消息时才打开连接

LOG_PERROR:将消息也同时送到stderr上

LOG_PID:在每条消息中包含进程的PID

facility:指定程序发送的消息类型

LOG_AUTHPRIV:安全/授权信息

LOG_CRON:时间守护进程(cron及at)

LOG_DAEMON:其他系统守护进程

LOG_KERN:内核信息

LOG_LOCAL[0~7]:保留

LOG_LPR:行打印机子系统

LOG_MAIL:邮件子系统

LOG_NEWS:新闻子系统

LOG_SYSLOG:syslogd内部所产生的信息

LOG_USER:一般使用者等级信息

LOG_UUCP:UUCP子系统

表7.10列出了syslog()函数的语法规范。

表7.10 syslog()函数语法

所需头文件

#includesyslog.h>

函数原型

voidsyslog(intpriority,char*format,...)

函数传入值

priority:指定消息的重要性

LOG_EMERG:系统无法使用

LOG_ALERT:需要立即采取措施

LOG_CRIT:有重要情况发生

LOG_ERR:有错误发生

LOG_WARNING:有警告发生

LOG_NOTICE:正常情况,但也是重要情况

LOG_INFO:信息消息

LOG_DEBUG:调试信息

format

以字符串指针的形式表示输出的格式,类似printf中的格式

表7.11列出了closelog()函数的语法规范。

表7.11 closelog函数语法

所需头文件

#includesyslog.h>

函数原型

voidcloselog(void)

1 2 3 4

关键词: 进程控制 Linux 守护进程 子进程

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版