zoukankan      html  css  js  c++  java
  • 守护进程和inetd超级服务器

    守护进程:
    1 系统启动时,由系统初始化脚本启动。一般在/etc目录下,或者以/etc/rc开头的目录
    2 许多网络服务器由inetd超级服务器启动
    3 cron守护进程按规则定期执行一些程序
    4 用at命令指定在将来的某一时刻执行程序。
     
    守护进程输出消息,syslog函数,消息发往syslogd守护进程
     
    syslogd守护进程:
    1 读入配置文件,通常是/etc/syslog.conf。设定守护进程对接收每次键入的各种等级消息的处理。
    2 创建一个unix域套接口,捆绑路径名/var/run/log
    3 创建一个UDP套接口,给它捆绑端口514
    4 打开路径名/dev/klog,内核中的所有出错消息作为这个设备的输入出现
     
    void syslog(int priority,const char * message,...); 
     
    举例:
    syslog(LOG_INFO|LOG_LOCAL2,"rename(%s,%s):%m",file1,file2);
    %m:将当前的errno值得出错消息取代
     
    在/etc/syslog.conf文件中进行设置
     
    daemon_init函数:使一个进程编程守护进程
    #include "unp.h"
    #include <syslog.h>
    #define MAXFD 64
    extern int daemon_proc;
    void daemon_init(const char * pname,int facility){
    int i;
    pid_t pid;
     
    if((pid = Fork())!=0) //调用fork,终止父进程,留下子进程继续运行。
        exit(0);
     
    setid(); //创建一个新的登陆会话session
    Signal(SIGHUP,SIG_IGN); //忽略SGIHUP信号并在此调用fork
     
    if((pid=Fork())!=0) //确保将来即使打开一个终端设备,也不会自动获得控制终端。
        exit(0);
     
    daemon_proc = 1; //非零时,出错处理函数将调用syslog函数取代fprintf输出到标准错误输出
     
    chdir("/");
    umask(0);//将工作目录改到根目录
     
    for(i=0;i<MAXFD;i++) //关闭守护进程从运行开始打开的所有文件描述字
        close(i);
     
    openlog(pname,LOG_PID,facility);
    }
    inetd守护进程
    /etc/inetd.conf配置超级服务器处理的服务
    守护进程工作流程:
    1 启动读/etc/inetd.conf文件,指定创建相应类型的套接口
    2 调用bind,绑定众所周知的端口和通配地址
    3 对TCP调用listen
    4 调用select等待套接口变为可读
    5 返回一个可读的套接口,如果是TCP套接口,就调用accept接受
    6 调用fork,由子进程处理服务请求
     
     
     
  • 相关阅读:
    Tomcat Jboss,jetty,Apache WebLogic区别与比较(阿里面试)
    zookeeper 负载均衡 核心机制-实现原理 包含ZAB协议(滴滴,阿里面试)
    六大Web负载均衡原理与实现
    LVS(Linus Virtual Server):三种IP负载均衡方式比较+另三种Web负载均衡方式
    JTable动态刷新数据
    java当中的定时器的4种使用方式
    java如何判断编码是否是utf8编码
    Java多线程-线程的同步与锁
    java中需要用equals来判断两个字符串值是否相等
    libcurl使用easy模式阻塞卡死等问题的完美解决---超时设置
  • 原文地址:https://www.cnblogs.com/xing901022/p/3532700.html
Copyright © 2011-2022 走看看