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

原来一直没搞明白超级服务器如何负责监听并启动其它的服务器的,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服务器程序