文档介绍:守护进程(1)
一般服务程序所遵循的通用模式
创建一个套接口(socket)
绑定端口和地址(bind)
使套接口处于监听状态,监视客户的连接请求(listen)
接受客户的请求(accept)
守护进程
守护进程是一种在后台运行的进程,独立于所有终端
网络服务器一般都采用这种方式运行,如Web服务器、FTP服务器、邮件服务器等。
守护进程(2)
守护进程的特点
当系统初始化时,它们被一次性启动。
它们启动后一直运行着,直至系统关闭。
大部分时间等待某一事件的发生,事件发生时它们便处理这些事件。
往往调用其他进程处理各种请求。
守护进程(3)
守护进程的几种启动方式
系统初启时,由初始化文件/etc/rc启动(如某些服务进程),这样启动的守护进程具有超级用户权限
由crontab周期性地启动(/etc/)
由命令at在某一指定的时间运行(只执行一次) (/etc/)
从终端上启动,这种方式的守护进程与终端相连,编写程序时,要处理好与终端、与同一终端相关的其他进程之间的关系
守护进程(4)
d守护进程
在redhat ,d来启动一些守护进程
UNIX系统以client/server方式提供多种服务,如ftpd、d、httpd等服务(以d结尾,意为daemon),这些进程事先启动服务进程,,占用太多的系统资源,而且可能有些服务进程很少使用.
从文件/etc/services查找服务所使用的端口号,并bind()
echo 7/tcp
ftp 21/tcp
23/tcp
守护进程(5)
几点说明
/sbin/chkconfig --list查看启动进程
chkconfig [--level <运行级>] <名字> <on|off|reset>
启动或停止服务,如:
# chkconfig --level 2 crond off
还可直接用:
/etc//httpd stop|start|restart
关于运行级:0、5关机;1、s或S单用户;2、3或4多用户;6重新启动
用户自己编写守护进程时,不必使用socket()、bind()、listen()、accept()等系统调用,而是根据/etc/
守护进程(6)
d守护进程
实例:
守护程序
客户程序
配置文件 inetdserv (root用户建立)
守护进程(7)
inetdserv守护进程实现步骤
配置文件为/etc/,其最后一行“includedir /etc/”,d的配置文件在/etc/
dserv()拷贝到/tmp目录下
以root的身份在/etc/(见下页)
修改文件/etc/services,添加一行:inetdserv 9099/tcp
/etc//d restart
守护进程(8)
# default: on
# description: The proftpd server serves proftpd sessions;
service inetdserv
{
disable = no
port = 9099
socket_type = stream
protocol = tcp
user = root
server = /tmp/inetdserv
wait = no
}
守护进程(9)
客户请求
./inetdcli
注意:将/etc/
$ 13
$ 9099
守护进程(10)
几个时间函数的用法
#include <>
time():获得当前时间戳
localtime():将time_t类型的日期/时间转换为ASCII码
strftime():格式化日期/时间
%a 缩写星期名%A星期全名
%b 缩写月份名%B月份全名
%C两位数字世纪(year/100) %Y 四位数字年
%d 日(01~31) %D mm/dd/yy或dd/mm/yy(少用)
%H 小时(00~23) %M 分(00~59) %S 秒