第8单元 守护进程_第1页
第8单元 守护进程_第2页
第8单元 守护进程_第3页
第8单元 守护进程_第4页
第8单元 守护进程_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux系统编程第8单元守护进程2第8单元 守护进程n8.1 守护进程特征n8.2 编程规则n8.3 出错记录守护进程概述n守护进程,精灵进程daemon,通常完成一些日常事务活动,如作业规划进程crond,打印进程lqd,以及网络服务等n通常随系统启动,在系统关闭时终止。后台运行,没有控制终端。主要原因有两点:用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断信号),不应对以前从该终端上启动的任何守护进程造成影响。守护进程分类n守护进程分类独立启动守护进程stand_alonen该类进

2、程启动后就常驻内存,所以会一直占用系统资源。其最大的优点就是它会一直启动,当外界有要求时相应速度较快,像httpd等进程;由xinetd启动的守护进程n系统启动时由一个统一的守护进程守护进程xinet来负责管理,当相应请求到来时需要通过xinet的转接才可以唤醒被xinet管理的进程。只有xinet这一守护进程守护进程占有系统资源,其他的内部服务并不一直占有系统资源,只有数据包到来时才会被xinet管理员来唤醒。nchkconfig -list 查看,有运行级别的是独立启动的,没有的是由xinetd启动的。4守护进程特征nps axj命令查看父进程为initPPID为1以超级用户特权运行UID

3、为0没有控制终端TTY为?, TPGID为-1启动守护进程的方法n在系统启动时由系统初始化脚本启动,这些脚本一般在/etc/rc*.d开头的目录。n由inetd超级服务器启动的,如telnetd、ftp等;n由cron 定时启动n由at启动。n守护程序也可以从终端启动,通常这种方式只用于守护进程的测试,或者是重启因某种原因而停止的进程。守护进程编程规则n1调用umask将文件模式创建屏蔽字设为0避免因为屏蔽字某些权限无法设置n2调用fork,父进程退出,子进程继续保证子进程不是一个进程组组长,为创建新会话准备n3调用setsid创建新会话子进程成为新会话首进程,新进程组长,无控制终端n4再次调

4、用fork,父进程退出,子进程继续保证新子进程不再是会话首进程,无法再次获得控制终端n5调用chdir将当前工作目录更改为根目录避免当前目录被卸载7守护进程编程规则n6关闭不再需要的文件描述符关闭从父进程继承来的文件描述符,避免某些文件始终打开n7打开/dev/null设备,将文件描述符012重定向其上任何对标准输入/输出/错误输出的函数不会有任何效果,因为没有控制终端。n8调用openlog函数打开系统日志服务syslogd的连接nP343 程序13-1n在main函数调用后进程即变成守护进程运行89第8单元 守护进程n8.1 守护进程特征n8.2 编程规则n8.3 出错记录登记出错信息n由

5、于守护进程没有控制终端,在发生问题时它要用一些其它方式以输出消息。可以通过向文件里写数据来输出消息,但这样不好管理,因为每一个守护进程要对应一个文件。一般用syslogd守护进程来登记出错信息。nsyslogd守护进程接收到守护进程发来的消息后,根据配置文件/etc/syslog.conf,决定不同类型消息送往何处。记录在磁盘文件中显示在终端上转发给其他主机的syslogd登记出错信息n三种方法可以产生发给syslogd的日志消息内核例程调用log函数用户进程调用syslog函数用户进程或网络进程向UDP端口514发送消息syslogd相关函数nsyslog函数用于向syslogd发送消息用法

6、与printf类似,增加第一项代表消息设施和级别nopenlog函数可选,一般用于在每条消息中增加附加信息。ncloselog函数可选,关闭被用于与syslogd通信的描述符。12openlog/closelog函数void openlog(const char *ident, int option, int facility);void closelog(void);nopenlog函数在第一次调用syslog之前调用,当不再需要发送登记消息时可调用closelog函数;ident:一个字符串,它将被加到每条登记消息前面;option:由以下值位或运算组合而成。LOG_CONS如果不能发往s

7、yslogd守护进程,则登记到控制台上LOG_NDELAY立即打开与syslogd连接,不延迟,否则要等到发送第一条消息LOG_PERROR既发往syslogd守护进程,又登记到标准错误输出LOG_PID登记每条消息的进程IDfacility:为后面没有设置设施的syslog调用设置一个缺省值。syslog函数void syslog(int priority, const char * message,);n参数message与printf所用的格式化字符串类似,同时增加了%m,它将由对应的当前errno值的出错消息所取代;priority是级别(level)和设施(facility)的组合。

8、P347 表13-2设施 表13-3级别。设施和级别的目的是,允许在/etc/syslog.conf文件中进行配置,使得对相同设施的消息得到同样的处理,或使相同级别的消息得到同样的处理。syslog函数的例子n当调用rename函数失败时,守护进程可能会调用: if (rename(file1, file2) = -1) syslog(LOG_INFO|LOG_LOCAL2, rename(%s,%s):%m, file1,file2);n如果/etc/syslog.conf配置文件内容(设施.级别): kern.*/dev/console local2.debug/var/log/cisco

9、./var/log/info.log 则该消息将登记到控制台,输出到/var/log/cisco.log以及/var/log/info.log文件末尾;一个简单例子(syslogtest.c)#include #include #include int main() openlog(here,LOG_PID,LOG_USER);syslog(LOG_INFO|LOG_LOCAL4,local4);closelog();printf(okn);n/etc/syslog.conf中*.info消息发送到/var/log/message中n手工添加对local4设施消息的处理(消息.级别 处理方式)local4.* /var/log/mylog然后在/var/log中创建mylog文件 重启syslog服务,service syslog restartn重新运行程序,查看/var/log/m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论