背景:除了網絡通訊,服務器程序還有許多細節問題,。
特色:細節都是模板式的,因此只須要講明白就好,遵循必定的規範就好
類別:1.1運行形式-->後臺進程,又稱爲守衛進程。沒有控制終端,也不會意外受到用戶輸入。
它的父進程是:init進程(pid是1 的進程)
1.2日誌系統。通常至少輸出到文件,還能夠輸出到專門的UDP服務器。通常在/var/log 都擁有本身的日誌目錄
1.3運行身份:某個專門的非root身份。例子:mysqld,httpd,syslogd等後臺程序,都分別擁有本身的帳戶mysql,apache,syslog
1.4可配置。能處理不少不少命令行選項。若是一次性運行的選項太多,則須要配置文件來管理。通常會放在/etc。好比squid在/etc/squid3/squid.conf
1.5記錄後臺進程的pid。啓動會有生成pid文件而且存入/var/run.例子:syslogd的pid文件是/var/run/syslogd.pid
1.6考慮系統資源和限制(自身最大負荷)例子:文件描述符的總數和內存總量。
linux細節處理方式
2.1日誌:rsyslogd(syslog函數)
2.2用戶信息:UID,EUID(有效用戶ID),GID,EGID
EUID:方便資源訪問。用途:它使得運行程序的用戶擁有該程序的有效用戶的權限。(su程序,su必需要訪問/etc/passwd來改變用戶信息。/etc/passwd是須要root權限的,因此普通用戶可以訪問它必須依靠EUID,擁有者能夠設定本身擁有程序的set-user-id,命令是:chmod +s ****程序)mysql
2.3進程間關係 2.3.1linux每一個進程都隸屬於一個進程組,除了pid還有PGID,每一個進程組都有一個首領進程。首領進程的pid和PGID是同樣的。 2.3.2進程組會一直存在。當其中全部進程都退出或者加入其餘組纔會終止。 2.3.3一個進程只能設置本身或者其子進程的{PGID。當子進程調用exec一系列函數後,父進程也不能再設置它的PGID。 2.4 會話 2.4.1定義:一些有關聯的進程組將造成一個會話\\ 實現:非首領進程能夠調用該函數來建立新會話。 實現特色:調用進程會成爲會話的首領,此時該進程是新會話的惟一成員。新建一個進程組,其PGID就是調用進程的PID,調用進程就是該組的首領。調用進程將離開終端 函數:pid_t setsid(void ); 特色:沒有sid,linux認爲他等於會話首領所在的進程組的PGID,pid_t getsid(pid_t pid); 2.5系統資源限制 2.6改變工做目錄和根目錄 2.6.1函數:獲取當前工做目錄和改變進程工做目錄char * getcwd(char* buf,size_t size); int chdir(const char* path) 函數2:改變進程根目錄chroot int chroot(const char* path) 2.7.1服務程序後臺化 linux 庫函數 int deamon(int nochdir,int noclose); 參數nochdir:是否改變工做目錄;0是爲根目錄,不然使用當前目錄,noclose是0,標準輸入和標準輸出和標準錯誤輸出都將重定向到/dev/null文件,不然依舊使用原有設備。該函數成功返回0.失敗返回-1;