Linux编程3.8 进程-守护进程

  • 守护进程(daemon)是生存期长的一种进程。它们常常在系统引导装入时启动,在系统关闭时终止。
  • 所有守护进程都以超级用户(用户ID为0)的优先权运行。
  • 守护进程没有控制终端。
  • 守护进程的父进程都是init进程

1、 守护进程编程步骤

  • 使用umask将文件模式创建屏蔽字设为0
  • 调用fork,然后让父进程退出(exit)
  • 调用setsia创建一个新会话
  • 将当前工作目录更改为要目录
  • 关闭不需要的文件描述符

2、 守护进程出错处理

  • 由于守护进程完全脱离了控制终端,因此,不能像其它程序一样通过输出错误信息到控制台的方式来通知程序员。
  • 通常办法是使用syslog服务,将出错信息输入到“/val/log/slog”系统日志文件中去。
  • syslog是linux中的系统日志管理服务通过守护进程syslog来维护。

3、 syslog服务说明

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

4、 相关操作函数

1)、openlog函数

#include <syslog.h>

void openlog(const char *ident, int option, int facility);
功能:打开一个到系统日志记录程序的连接。

参数

  • ident:要向每个消息加入的字符串,通常为程序的名称。
  • option
    • LOG_CONS 若日志消息不能通过发送到syslog,则将该消息写到控制台。
    • LOG_NDELAY 立即打开linux域数据报套招口到syslog守护进程,通常,在记录第一条消息之前,该套接口不打开。
    • LOG_PERROR 除将日志消息发送给syslog外,还将它写至stderrr.
    • LOG_PID 每条消息都包含进程ID,此选择项可供对每个请求都fork一个子进程的守护进程使用。
  • facility 指定记录消息的类型
标识说明
LOG_AUTH安全/授权消息
LOG_AUTHPRIV安全/授权消息(专用)
LOG_CRON时钟守护进程(CRON和at)
LOG_DAEMON系统守护进程,没有单独的设施值
LOG_FTP守护程序
LOG_KERN内核消息(这些消息不能从用户进程中生成)
LOG_LOCAL0 through LOG_LOCAL7保留供本地使用
LOG_LPR行式打印机子系统
LOG_MAIL邮件子系统
LOG_NEWS使用NET新闻子系统
LOG_SYSLOG由syslogd(8)内部生成的LOG_SYSLOG消息
LOG_USER(默认)通用用户级消息
LOG_UUCPUUCP子系统

2)、syslog和closelog函数

#include <syslog.h>

void syslog(int priority, const char *format, ...);
void closelog(void);

参数

PRIORITY:消息优先级
标识说明
LOG_EMERG紧急(系统不可使用,最高优先级)
LOG_ALERT必须立即修复的条件
LOG_CRIT临界条件(例如,硬设备出错)
LOG_ERR出错条件
LOG_WARNING警告条件
LOG_NOTICE正常,但重要的条件
LOG_INFO信息性消息
LOG_DEBUG调试排错消息(最低优先级)

5、示例代码

/*守护进程编程的5个步骤*/
//1、 创建屏蔽子为0
umask(0);
//2、 调用fork函数创建子进程,然后父进程退出
pid_t pid=fork();
if(pid>0) exit(0);
//3、 调用setsid函数创建一个新会话
setsid();
//4、 将当前工作目录更改为根目录
chdir("/");
//5、 关闭不需要的文件描述符
close(STDIN_FIENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);


//打开日志
syslog(LOG_DEBUG,"write:%s \n",strerror(errno));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值