您好,登錄后才能下訂單哦!
背景:除了網絡通信,服務器程序還有許多細節問題,。
特點:細節都是模板式的,所以只需要講明白就好,遵循一定的規范就好
類別: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 ****程序)
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;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。