首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

UNIX网络编程-看护进程和inetd超级服务器(十三)

2013-10-08 
UNIX网络编程---守护进程和inetd超级服务器(十三)UNIX网络编程---守护进程和inetd超级服务器一、概述守护进

UNIX网络编程---守护进程和inetd超级服务器(十三)

UNIX网络编程---守护进程和inetd超级服务器

一、概述

守护进程是在后台运行且不于任何控制终端挂链的进程。UNIX系统有很多守护进程在后台工作(有20到50的数量级),执行不同的任务

守护进程没有控制终端通常源于它们由系统初始化脚本启动。然而守护进程也可能从某个终端由用户在shell提示符下键入命令行启动,这样的守护进程必须亲自脱离于控制终端的关联,从而避免与作业的控制、终端会话管理、终端产生信号等发生任何不期望的交互,也可以避免在后台运行的守护进程非预期低输出到终端。

守护进程有多重启动方法:

1)  在系统启动阶段,由系统初始化脚本启动

2)  有inetd超级服务器启动

3)  Cron守护进程按照规则定期执行一些程序,而由它启动执行的程序同样作为守护进程运行

4)  at命令用于指定将来某个时刻的程序执行。

5)  守护进程还可以行用户终端或在前台或在后台启动

二、Syslogd守护进程

此守护进程通常由某个系统初始化脚本启动

1)  读取配置文件。通常为/etc/syslog.conf的配置文件指定本守护进程可能收取的各种日志消息应该如何处理。这些消息坑内被添加到一个文件/dev/console文件时一个特例,它把消息写到控制台上),或被写到指定用户的登录窗口,或被转发给另一个主机上的syslogd进程。

2)  创建一个UNIX域数据报套接字,给它捆绑路径名/var/run/log(有的是/dev/log)

3)  创建一个udp套接字,给他捆绑端口514(syslog服务使用的端口号)。

4)  打开路径名/dev/klog、来自内核中的任何出错消息看着像是这个设备的输入

此后syslogd守护进程在一个无限循环中进行,调用select以等到它的三个描述符(来自上述第2、3、4步)之一变为可读,读取日志消息,并按照配置文件进行处理。如果守护进程收到SIGHUP信号,那就是重新读取配置文件。

通过创建一个UNIX域数据报套接字,我们就可以从自己的守护进程中通过syslogd绑定的路径名发送我们的消息达到发送日志消息的目的。


三、Syslog函数

从守护进程中等级消息的常用技巧就是调用syslog函数

#include<syslog.h>

Void syslog(intpriority,const char *message,…..);

函数中的priority参数是级别和设施两者的组合,message参数类似printf的格式串,日志信息的level从0到7,按照东高到低的顺序排列的,默认情况为LOG_NOTICE

UNIX网络编程-看护进程和inetd超级服务器(十三)        

举例来说,当rename函数调用意外失败时,守护进程可以执行以下调用

Syslog(LOG_INFO|LOG_LOCAL2,”RENAME(%S,%S):%m”,file1,file2);

当syslog被应用进程首次调用时,它闯将一个UNIX域数据报套接字,然后调用connect连接到有syslogd守护进程创建的UNIX域数据报套接字的周所周知的路径名(譬如/var/run/log)

这个套接字一直保持打开,直到进程终止为止。进程也可以使用openlog和closelog

#include <syslog.h>

Void openlog(const char *ident,intoptions,int facility);

Void closelog(void);

Openlog可以在首次调用syslog前调用,closelog可以在应用进程不再需要发送日志消息时调用

Ident参数是一个有syslog冠于每个日志消息之前的字符串。它的值通常是程序名

UNIX网络编程-看护进程和inetd超级服务器(十三)

Openlog被调用时,通常并不立即创建UNIX域套接字。该套接字直到首次调用syslog时才打开。LOG_NDELAD选项破事该套接字在openlog被调用时就创建。

四、Daemon_init函数

调用这个函数可以把普通进程转换为守护进程。但是在有的UNIX变体中已经更改了使用方法

五、Inetd守护进程

在TFTP、telnet/tftp这些服务来说,都会有一个进程与之关联。每个进程执行几乎相同的任务:创建一个套接字,把本地服务器的周所周知端口捆绑到该套接字,等待一个连接或一个数据报,然后派生子进程。子进程为客户提供服务,父进程则继续等到下一个客户请求

1)  所有这些守护进程含有几乎相同的启动代码,既表现在创建套接字上,也表现在演变成守护进程上。

2)  每个守护进程在进程表中占据一个表项,然而它们大部分时间处于睡眠状态,因特网超级服务器(既inetd守护进程)使上述问题得到简化。基于TCP或UDP的服务器都可以使用这个守护进程

六、Daemon_inetd函数

热点排行