红联Linux门户
Linux帮助

看APUE笔记---inetd守护进程工作流程

发布时间:2008-08-15 20:35:24来源:红联作者:panaiec
原来一直没搞明白超级服务器如何负责监听并启动其它的服务器的,APUE上讲到了inetd的工作原理,按自己的理解描述一下以加深印象.

APUE上写的超级服务器上inetd,估计这是unix上的程序名,我用的是linux,linux上面则是xinetd,为何linux上加了个x我不得而知.

inetd启动后,从/etc/inetd.conf文件中读取由它启动的服务器信息(linux下为/etc/xinetd.conf文件,该文件又include了/etc/xinetd.d目录,各服务器的配置都在这个目录下).

引用:
socket #1

|

bind

|

listen(若是TCP服务器)返回#1继续循环 通常由服务名得到端口号getservbyname

|

select #2

|

accept(若是TCP服务器,得到fd)

|

fork

/ \

/ \

/ \

pid>0 pid==0(子进程)

goto #2 除accept得到的描述符外,将所有其它的socket描述符都关闭

close(fd) |

FD_CLR |

用dup将accept得到的描述符复制到0,1,2上

(即标准输入/标准输出/标准错误)

|

setuid,setgid (当时是root权限,如果不是以root用户执行则因修改权限)

|

|

exec服务器程序


此后服务器接收和发送数据都对标准输入/标准输出/标准错误进行操作.

一般提供大量服务的服务器都不应该由inetd进程监听端口,如:web服务器,sendmail服务器等.要提供大量的服务由inetd来监听,响应会很慢.
文章评论

共有 0 条评论