`

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

 
阅读更多

 

守护进程(daemon)是在后台运行且不与任何控制终端关联的进程。

启动守护进程的方法

1)在系统启动阶段,许多守护进程由系统初始化脚本启动,这些脚本通常位于/etc/目录或者以/etc/rc开头的某个

    目录汇总。有若干个网络服务器通常从这些脚本启动:inetd超级服务器

2)许多网络服务器由inetd超级服务器启动。inetd自身由一个脚本启动。inetd监听网络请求(FTP,telnet等)每当

    有一个请求达到时,启动相应的实际服务器(FTP服务器,telnet服务器)

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

    第一条启动方法中的某个脚本启动

4)at命令一欧诺个鱼指定将来某个时刻的程序执行。这些程序的执行时刻到来时,通常由cron守护进程启动

    执行他们,因此这些程序同样作为守护进程运行。

5)守护进程还可以从用户终端或者再前台或在后台启动。这么做往往是为了测试守护程序或重启因某种原因

   而终止了的某个守护进程

 

 

syslogd守护进程

unix系统中的syslogd守护进程通常由某个系统初始化脚本启动,而且在系统工作期间一直运行。执行步骤如下

1)读取配置文件,通常是/etc/syslog.conf

2)创建一个unix域数据报套接字,给他捆绑的路径是/var/run/log,有些系统是/dev/log

3)创建一个UDP套接字,捆绑到514端口,syslog服务使用的端口

4)打开路径名/dev/klog,来自内核中的任何出错消息都输入到这里

 

//syslog函数
#include <syslog.h>
void syslog(int priority, const char *message, ...);

 本函数中的priority参数是级别(level)和设施(facility)两者的组合

 

openlog的facility参数     

facility 说明
LOG_AUDIT 审计设施
LOG_AUTH 授权程序login,su,getty等
LOG_AUTHPRIV

与LOG_AUTH相同,但写日志文件时

具有权限限制

LOG_CONCOLE 将消息写入/dev/console
LOG_CRON cron和at
LOG_DAEMON 系统守护进程inetd,routed等
LOG_FTP FTP守护进程ftpd
LOG_KERN 内核产生消息
LOG_LOCAL0 保留由本地使用
LOG_LOCAL1 保留由本地使用
LOG_LOCAL2 保留由本地使用
LOG_LOCAL3 保留由本地使用
LOG_LOCAL4 保留由本地使用
LOG_LOCAL5 保留由本地使用
LOG_LOCAL6 保留由本地使用
LOG_LOCAL7 保留由本地使用
LOG_LPR 行式打印机系统lpd,lpc等
LOG_MAIL 邮件系统
LOG_NEWS Usenet网络新闻系统
LOG_NTP 网络时间协议系统
LOG_SECURITY 安全子系统
LOG_SYSLOG syslogd收紧进程本身
LOG_USER 来自掐用户进程的消息(默认)
LOG_UUCP UUCP系统

 

syslog中的level(按序排列)

level 说明
LOG_EMERG 紧急(系统不可使用)(最高优先级)
LOG_ALERT 必须立即修复的情况
LOG_CRIT 严重情况(如硬件设备处错)
LOG_ERR 出错情况
LOG_WARNING 警告情况
LOG_NOTICE 正常但重要的情况
LOG_INFO 信息性消息
LOG_DEBUG 调试消息(最低优先级)

 

//当程序执行失败时,执行下列程序
syslog(LOG_INFO|LOG_LOCAL2, "execute failure");

/etc/syslog.conf配置类似如下

kern.*          /dev/console
local7.debug /var/log/cisco.log
所有内核的消息都输出到控制台
所有local7的debug几倍消息都输出到 cisco.log文件中

 

//进程也可以调用下面两个函数
//openlog可以在首次调用syslog前调用
//closelog可以再应用进程不再需要发送日志消息时调用
#include <syslog.h>
void openlog(const char *ident, int options, int facility);
void closelog(void);

 

syslog的 openlog函数的option参数

option 说明
LOG_CONS 若日志消息不能通过UNXI域数据报发送至syslogd,则将消息写至控制台
LOG_NEDLAY

立即打开至syslogd守护进程的UNIX域数据报套接字,不要等到第一条消息已经被记录时

再打开。通常在记录第一条消息之前,不打开该套接字

LOG_NOWAIT

不要等待在将消息记入日志过程中可能已创建的子进程。因为再syslog调用wait时,应用

程序可能已获得了子进程的状态,这种处理阻止了与捕捉SIGCHLD信号的应用程序之间

产生的冲突

LOG_ODELAY 在第一条消息被记录之前延迟打开至syslogd守护进程的连接
LOG_PERROR 除将日志消息发送给syslogd外,还将它写至标准出错(在Solaris上不可用)
LOG_PID

记录每条消息都要包含进程ID,此选项可供对每个不同的请求都fork一个子进程的守护

进程使用(与从不调用fork的守护进程相比较,如syslogd)

 

 

inetd守护进程

典型的unix系统可能存在许多服务器,他们只是等待客户请求的达到,如FTP,telnet等。所有这些服务都有一个进程与之关联。这些进程都是从/etc/rc文件中启动。而且每个进程执行几乎相同的启动任务:创建一个套接字,把本服务器的众所周知端口捆绑到该套接字,等待一个连接。

这个模型存在两个问题

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

2)每个守护进程再进程表中占据一个表项,然后他们大部分时间处于睡眠状态

 

使用一个特殊的inetd超级服务器解决上述问题

1)通过由inetd处理普通守护进程的大部分启动细节以简化守护进程的编写。

2)单个进程(inetd)就能为多个服务等待外来的客户请求,以此取代每个服务一个进程的做法,这么做减少了

    系统中的进程总数

 

/etc/xinetd.d 目录下配置文件各字段解释

字段 说明
service-name 必须在/etc/services文件中定义
socket-type stream(对于TCP)或者dgram(对于UDP)
protocol 必须在/etc/protocols文件中定义
wait-flag 对于TCP一般为nowait,对于UDP是wait
login-name 来自/etc/passwd的用户名,一般为root
server-program 调用exec指定的完整路径名
server-program-arguments 调用exec指定的命令行参数

 

inetd的工作流程


工作步骤

1)在启动阶段,读取/etc/xinetd.d 目录下的文件并为每个服务创建一个适当类型的套接字

2)为每个端口调用bind,指定捆绑相应服务器的总所周知端口和统配地址,这个TCP或者UDP端口号通告

   getserverbyname获得

3)对于每个TCP套接字,调用listen以接受外来的连接请求

4)创建完所有套接字后,调用select等待其中任何一个套接字变为可读。inetd大部分时间都阻塞在select调用上

5)当select返回指出魔木格套接字可读之后,如果该套接字是一个TCP套接字,而且其服务器的wait-flag值为

    nowait那就调用accept接受这个新连接

6)inetd守护进程调用fork派生进程,并由子进程处理服务请求,这一点类似标志的并发服务器

7)如果第五部中select返回的是是一个字节流套接字,那么父进程必须关闭已连套接字。父进程再次调用select

    等待下一个变为可读的套接字

 

 

 

 

 

 

 

 

参考

UNP Chapter 12 - 守护进程和inetd超级服务器

 

 

 

 

 

 

 

  • 大小: 19.5 KB
分享到:
评论

相关推荐

    UNIX网络编程 第2卷 进程间通信 带完整书签

    UNIX网络编程 第2卷 进程间通信 ...第13章 守护进程和inetd超级服务器? 第14章 高级I/O函数 第15章 Unix域协议 第16章 非阻塞I/O 第17章 ioctl操作 第18章 路由套接口 第19章 密钥管理套接口? -------

    UNIX网络编程 第2卷 进程间通信.pdf(带书签)

    第13章 守护进程和inetd超级服务器? 第14章 高级I/O函数 第15章 Unix域协议 第16章 非阻塞I/O 第17章 ioctl操作 第18章 路由套接口 第19章 密钥管理套接口? 第20章 广播 第21章 多播 第22章 高级UDP套接口编程 第23...

    UNIX网络编程卷2进程间通信

    本书是一部UNIX网络API的经典之作!...I/O:复用高级函数,非阻塞和信号驱动 守护进程和inetd UNIX域协议 ioctl操作 广播和组播 线程 流 设计:TCP迭代的、并发的、预先创建的和预先线程化的服务器

    UNIX网络编程第1卷(1-19章)

    第一章 简介 第二章 传输层:TCP UDP ...第十二章 守护进程和inetd超级服务器 第十三章 高级I/O函数 第十四章 Unix域协议 第十五章 非阻塞I/O 第十六章 ioctl操作 第十七章 路由器接口 第十八章 广播 第十九章 多播

    unix网络编程源码

    《unix网络编程》书中的源代码 ... ·守护进程和inetd  ·UNIX域协议  ·ioctl操作  ·广播和组播  ·线程  ·流  ·程序设计:TCP迭代服务器、并发服务器、预先派生子进程服务器、预先线程服务器等

    UNIX网络编程 卷1:套接字联网API

    第13章 守护进程和inetd超级服务器 第14章 高级I/O函数 第15章 Unix域协议 第16章 非阻塞式I/O 第17章 ioctl操作 第18章 路由套接字 第19章 密钥管理套接字 第20章 广播 第21章 多播 第22章 高级...

    UNIX网络编程卷2进程间通信(第2版)

    第13章 守护进程和inetd超级服务器? 第14章 高级I/O函数 第15章 Unix域协议 第16章 非阻塞I/O 第17章 ioctl操作 第18章 路由套接口 第19章 密钥管理套接口? 第20章 广播 第21章 多播 第22章 高级UDP套接口编程 第23...

    UNIX网络编程卷1:套接字联网API(第3版)part1 共2部分

    第13章 守护进程和inetd超级服务器 第14章 高级I/O函数 第15章 Unix域协议 第16章 非阻塞式I/O 第17章 ioctl操作 第18章 路由套接字 第19章 密钥管理套接字 第20章 广播 第21章 多播 第22章 高级UDP套接字...

    UNIX网络编程卷1套接字联网API.part1.rar

    本书是一部UNIX网络API的经典之作!...I/O:复用高级函数,非阻塞和信号驱动 守护进程和inetd UNIX域协议 ioctl操作 广播和组播 线程 流 设计:TCP迭代的、并发的、预先创建的和预先线程化的服务器

    UNIX网络编程卷1套接字联网API.part2.rar

    本书是一部UNIX网络API的经典之作!...I/O:复用高级函数,非阻塞和信号驱动 守护进程和inetd UNIX域协议 ioctl操作 广播和组播 线程 流 设计:TCP迭代的、并发的、预先创建的和预先线程化的服务器

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

     第十章 守护进程和超级服务器inetd  10.1 守护进程的原理  10.2 编程实践  10.3 超级服务器inetd的工作原理  10.3.1 超级服务器的概念  10.3.2 超级服务器使用的配置文件  10.3.3 inetd处理...

    unix大全(涵盖了UNIX学习的方方面面)

    11.SCO TCP/IP网络管理---守护进程inetd 12.SCO TCP/IP网络管理---守护进程(daemon) 13.SCO TCP/IP网络管理---ifconfig命令的语法 14.SCO UNIX5的几个主要系统进程 15.SCO UNIX5 的动态核心表 16.进程管理的两个...

    linux programming instances网络编程教程 附源代码

    为了适应不同读者的需要,本书从最基本的Linux系统操作到网络技术的基本理念,逐步深入至Linux/UNIX下具体的编程实践,结合大量具体实例和编程经验,为读者展现Linux平台下网络编程的魅力。 全书由13章组成,内容...

    Linux 守护进程的编程方法

    守护进程(Daemon)是运行在后台的一种非凡...Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。

    Linux网络编程

    6.12 使用Inetd(Internet 超级服务器) ......... 199 6.12.1 简介................. 199 6.12.2 一个简单的inetd 使用的服务器程序hello inet service...... 199 6.12.3 /etc/services 和 /etc/inetd.conf 文件......

    Network Programming With Perl

    第10章 创建子进程的服务器和inetd守护进程 第11章 多线程应用程序 第12章 多路复用应用程序 第13章 无阻塞I/O 第14章 安全的服务器 第15章 预创建于进程和预创建线程 第16章 IO:: Poll 第4部分高级话题 ...

    linux 网络编程源代码

    1.1 网络的历史.......................................................................................................1 1.2 OSI 模型........................................................................

    Linux网络编程.pdf socket tcp udp

    1.6 Linux 和 Unix 的发展 .................................................................................... 15 第二章 UNIX/Linux 模型...................................................................

    RED HAT LINUX 6大全

    13.4 配置NFS服务器和客户 236 13.4.1 建立/etc/exports文件 237 13.4.2 使用mount加载一个导出的文 件系统 238 13.4.3 卸载文件系统 238 13.4.4 配置/etc/fstab文件以自动加载 文件系统 239 13.5 完成样本配置...

Global site tag (gtag.js) - Google Analytics