05 守护进程的出错处理
来源:互联网 发布:java程序设计案例教程 编辑:程序博客网 时间:2024/06/10 11:55
守护进程的出错处理
由于守护进程完全脱离了控制终端,因此,不能像其他程序一样通过输出错误信息到控制台的方式来通知程序员。
通常的办法是使用syslog服务,将出错信息输入到“/var/log/message”系统日志文件中去。
Syslog是linux中的系统日志管理服务通过守护进程syslog来维护。
Openlog函数用于打开系统日志服务的一个连接;
Syslog函数用于向日志文件中写入消息,在这里可以规定消息的优先级、消息的输出格式等;
Closelog函数用于关闭系统日志服务的连接。
1)openlog函数
#include <syslog.h>
void openlog(char * ident, int option, intfacility) ;
Ident:要向每个消息加入的字符串,通常为程序的名称;
option参数
n LOG_CONS: 若日志消息不能通过发送至syslogd ,则将该消息写至控制台;
n LOG_NDELAY: 立即打开UNIX域数据报套接口至syslsgd守护进程。通常,在记录第一条消息之前,该套接口不打开。
n LOG_PERROR:除将日志消息发送给syslog外,还将它写至标准出错(stderr)。
n LOG_PID:每条消息都包含进程ID,此选择项可供对每个请求都fork一个子进程的守护进程使用。
openlog的facility参数
n LOG_AUTH 授权程序: login.su,getty, ⋯
n LOG_CRONcron 和 at
n LOG_DAEMON 系统守护进程:ftpd,routed, ⋯
n LOG_KERN 内核产生的消息
n LOG_LOCAL0~7 保留由本地使用
n LOG_LPR 行打系统:lpd, lpc, ⋯
n LOG_MAIL 邮件系统
n LOG_NEWSU senet网络新闻系统
n LOG_SYSLOG syslogd守护进程本身
n LOG_USER 来自其他用户进程的消息
n LOG_UUCP UUCP系统
(2)syslog函数
#include <syslog.h>
void syslog(int priority, char *format, ...);
Priority选项(消息优先级)
n LOG_EMERG 紧急(系统不可使用) (最高优先级)
n LOG_ALERT 必须立即修复的条件
n LOG_CRIT 临界条件(例如,硬设备出错)
n LOG_ERR 出错条件
n LOG_WARNING 警告条件
n LOG_NOTICE 正常,但重要的条件
n LOG_INFO 信息性消息
n LOG_DEBUG 调试排错消息(最低优先级)
3)closelog函数
#include <syslog.h>
void closelog(void);
举例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#include<syslog.h>
#define MAXFILE 65535
int main()
{
pid_t pc,sid;
int i,fd,len;
char *buf="This is a Dameon\n";
len =strlen(buf);
pc=fork();
if(pc<0)
{
printf("error fork\n");
exit(1);
}
else if(pc>0)
exit(0);
openlog("demo_update",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<MAXFILE;i++)
close(i);
while(1)
{
if((fd=open("/tmp/dameon.log",O_CREAT|O_WRONLY|O_APPEND, 0600))<0)
{
syslog(LOG_ERR, "open");
exit(1);
}
write(fd, buf, len+1);
close(fd);
sleep(10);
}
closelog();
exit(0);
}
- 05 守护进程的出错处理
- 守护进程的出错处理
- 进程学习:4-守护进程的出错记录
- 什么是守护进程?守护进程的特性
- python daemon 守护进程对信号的处理
- C语言实现简单的守护进程及信号处理
- 守护进程的原理
- 守护进程的原理
- 守护进程的编写
- 守护进程的理解
- 守护进程的实现
- 关于守护进程的
- 守护进程的创建
- 守护进程的编写
- Linux的守护进程
- 守护进程的写法
- 守护进程的编写
- 守护进程的建立
- Timer与TimerTask详解
- 02 Linux中的进程管理
- 安装新版本Qt Creator后F1无法显示帮助文档的问题
- std::map 中调用 std::copy 的方法
- 04 守护进程
- 05 守护进程的出错处理
- 第二章 项目管理模型
- 软件开发工期估算系列(7)——規模見積もりの女王様「FP見積もり」【後編】(内附FP简易算法示例)
- 记录socket函数调用分析
- XML 根级别上的数据无效。 行 1,位置 1
- STL sort用法
- 【動態規劃】飆車
- struts2 Action中获取request, response,Session对象的方法
- POJ1887 Testing the CATCHER 最大下降子序列 DP