烟台网站建设学校,17素材网下载,网站建设维护工作总结,移动互联网的终端包括我们大家经常使用的守护进程#xff08;daemon#xff09;是生存期长的一种进程。它们常常在系统引导装入时启动#xff0c;在系统关闭时终止。所有守护进程都以超级用户#xff08;用户ID为0#xff09;的优先权运行。守护进程没有控制终端。守护进程的父进程都是init进程
1、 守护进程编程…守护进程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.hvoid 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和atLOG_DAEMON系统守护进程没有单独的设施值LOG_FTP守护程序LOG_KERN内核消息这些消息不能从用户进程中生成LOG_LOCAL0 through LOG_LOCAL7保留供本地使用LOG_LPR行式打印机子系统LOG_MAIL邮件子系统LOG_NEWS使用NET新闻子系统LOG_SYSLOG由syslogd8内部生成的LOG_SYSLOG消息LOG_USER默认通用用户级消息LOG_UUCPUUCP子系统
2、syslog和closelog函数
#include syslog.hvoid 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 pidfork();
if(pid0) 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));