守護進程和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,由子進程處理服務請求
相關文章
相關標籤/搜索