




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
2.1守護進程簡介Linux服務器在啟動時需要啟動很多系統(tǒng)服務,它們向本地和網(wǎng)絡用戶提供了Linux的系統(tǒng)功能接口,直接面向應用程序和用戶。提供這些服務的程序是由運行在后臺的守護進程(daemons)來執(zhí)行的。守護進程是生存期長的一種進程。它們獨立于控制終端并且周期性的執(zhí)行某種任務或等待處理某些發(fā)生的事件。他們常常在系統(tǒng)引導裝入時啟動,在系統(tǒng)關閉時終止。linux系統(tǒng)有很多守護進程,大多數(shù)服務器都是用守護進程實現(xiàn)的。同時,守護進程完成許多系統(tǒng)任務,比如,作業(yè)規(guī)劃進程crond、打印進程lqd等。有些書籍和資料也把守護進程稱作:“服務”。選擇運行哪些守護進程,要根據(jù)具體需求決定。2.2守護進程特征:1.所有守護進程都以超級用戶(用戶ID為0)的優(yōu)先權運行。2.沒有一個守護進程具有控制終端終端名稱設置為問號,終端前臺進程組ID設置為-1.缺少控制終端可能是精靈進程調用setsid的結果。3.除update以外的所有精靈進程都是進程組的首進程,對話期的首進程,而且是這些進程組和對話期中得唯一進程。Update是它所在進程組和對話期(中得唯一進程,但是該進程組的首進程(可能也是該對話期的首進程)已經(jīng)終止。)4.所有這些守護進程的父進程都是init進程。2.3守護進程編程規(guī)則(5步)(1)創(chuàng)建子進程,父進程推出:首先調用fork,然后使父進程exit。實現(xiàn)了:1,如果該守護進程是一個簡單shell命令啟動的,那么父進程終止使得shell認為這條命令已經(jīng)執(zhí)行完成。2,子進程繼承父的進程組ID,但具有一個新的進程ID,保證子不是進程組首進程。這對于下面就要做的setsid調用是必要的前提條件。(2)調用setsid以創(chuàng)建一個新的會話,并且擔任會話組組長。調用setsid作用:1,脫離以前的會話組;2,脫離以前的進程組;3,脫離以前的控制終端。(3)改變當前目錄為根目錄 Chdir(“/”);(4)重設文件權限掩碼 Umask(0);(5)關閉不再需要的文件描述符。For(i=0;iMAXFILE;I+)Close(i);3.1syslog函數(shù)說明Openlog函數(shù)用于打開系統(tǒng)日志服務(Linux系統(tǒng)中的日志子系統(tǒng)對于系統(tǒng)安全來說非常重要,它記錄了系統(tǒng)每天發(fā)生的各種各樣的事情,包括那些用戶曾經(jīng)或者正在使用系統(tǒng),可以通過日志來檢查錯誤發(fā)生的原因,更重要的是在系統(tǒng)受到黑客攻擊后,日志可以記錄下攻擊者留下的痕跡,通過查看這些痕跡,系統(tǒng)管理員可以發(fā)現(xiàn)黑客攻擊的某些手段以及特點,從而能夠進行處理工作,為抵御下一次攻擊做好準備。)的一個連接;Syslog函數(shù)用于向日志文件中寫入信息,在這里可以規(guī)定消息的優(yōu)先級,消息的輸出格式等;Closelog函數(shù)用于關閉系統(tǒng)日志服務的連接。4.共享內(nèi)存共享內(nèi)存實現(xiàn)分為兩個步驟:一, 創(chuàng)建共享內(nèi)存,使用shmget函數(shù)。二, 映射共享內(nèi)存,將這段創(chuàng)建的共享內(nèi)存映射到具體的進程空間去,使用shmat函數(shù)。5.消息隊列消息隊列就是消息的一個連接,它允許一個或多個進程向它寫消息,一個或多個進程從中讀消息。具有一定的FIFO的特性,但是可實現(xiàn)消息的隨機查詢。這些消息存在于內(nèi)核中,由“隊列ID”來標識。消息隊列的實現(xiàn)包括創(chuàng)建和打開隊列,添加消息,讀取消息和控制消息隊列這四種操作。Msgget:創(chuàng)建和打開隊列,其消息數(shù)量受系統(tǒng)限制。Msgsnd:添加消息,將消息添加到消息隊列尾部。Msgrcv:讀取消息,從消息隊列中取走消息。Msgctl:控制消息隊列。Linux的系統(tǒng)調用與文件IO1.1, linux系統(tǒng)調用 所謂系統(tǒng)調用是指操作系統(tǒng)提供給用戶程序的一組“特殊”接口,用戶程序可以通過這組“特殊”接口來獲得操作系統(tǒng)內(nèi)核提供的特殊服務。系統(tǒng)調用,api與系統(tǒng)命令之間的關系2.3open函數(shù)(如果文件不存在則創(chuàng)建,如果文件存在則打開)#inlude#inlude#inludeInt open(const char *pathname, int oflag,/*,mode_t mode*/); / const是一個C語言的關鍵字,它限定一個變量不允許被改變返回:若成功為文件描述符,若出錯為-1Pathname是要打開或創(chuàng)建的文件的名字。Oflag參數(shù)可用來說明此函數(shù)的多個選擇項。對于open函數(shù)而言,僅當創(chuàng)建新文件時才使用第三個參數(shù)。用下列一個或多個常數(shù)進行或運算構成oflag參數(shù)(這些常數(shù)定義在頭文件中):O_RDONLY只讀打開。O_WRONLY只寫打開。O_RDWR讀,寫打開等等2.4creat函數(shù)可用creat函數(shù)創(chuàng)建一個新文件#inlude#inlude#inludeInt creat(const char *pathname,mode_t mode);返回:若成功為只寫打開的文件描述符,若出錯為-1.注意,此函數(shù)等效于:open(pathname,O_WRONLY| O_CREAT| O_TRUNC,mode);creat的一個不足之處是它以只寫方式打開所創(chuàng)建的文件。2.5close函數(shù)可用close函數(shù)關閉一個打開文件:#inludeint close(int filedes);返回:若成功為0,若出錯為-1 當一個進程終止時,它所有的打開文件都由內(nèi)核自動關閉。很多程序都使用這一功能而不顯式地用close關閉打開的文件。exit(1)/exit()就是退出,傳入的參數(shù)是程序退出時的狀態(tài)碼,0表示正常退出,其他表示非正常退出2.6lseek函數(shù)每個打開文件都有一個與其相關聯(lián)的“當前文件偏移量”。它是一個非負整數(shù),用以度量從文件開始處計算的字節(jié)數(shù)。通常,讀,寫操作都從當前文件偏移量處開始,并使偏移量增加所讀或寫得字節(jié)數(shù)。按系統(tǒng)默認,當打開一個文件時,除非指定O_APPEND選擇項,否則該位移量被設置為0.可以調用lseek顯示地定位一個打開文件。#inlude#inludeOff_t lseek(int filesdes,off_t offset,int whence);返回:若成功為新的文件位移,若出錯為-1.對參數(shù)offset的解釋與參數(shù)whence的值有關。若lseek成功執(zhí)行,則返回新的文件位移量,為此可以用下列方式確定一個打開文件的當前位移量:off_t currpos;currpos=lseek(fd,0,SEEK_CUR);2.7read函數(shù)用read函數(shù)從打開文件中讀數(shù)據(jù)#includeSsize_t read(int feledes,void *buff,size_t nbytes);返回:讀到的字節(jié)數(shù),若已到文件尾為零,若出錯為-1. 如read成功,則返回讀到的字節(jié)數(shù)。如已到達文件的尾端,則返回0.2.8write函數(shù)用write函數(shù)向打開文件寫數(shù)據(jù)。#includeSsize_t write(int filedes , const void *buff,size_t nbytes);返回:若成功為已寫的字節(jié)數(shù),若出錯為-1.其返回值通常與參數(shù)nbytes的值不同,否則表示出錯。Write出錯的一個常見原因是:磁盤已寫滿,或者超過了對一個給定進程的文件長度限制。對于普通文件,寫操作從文件的當前位移量處開始。如果在打開該文件時,指定了O_APPEND選擇項,則在每次寫操作之前,將文件位移量設置在文件的當前結尾處。在一次成功寫之后,該文件位移量增加實際寫的字節(jié)數(shù)。2.9fcntl函數(shù)Fcntl函數(shù)可以改變已經(jīng)打開文件的性質。#inlude#inlude#inludeint fcntl(int filedes,int cmd,);返回:若成功則依賴于cmd(見下),若出錯為-1。fcntl函數(shù)有五種功能:1,復制一個現(xiàn)存的描述符,新文件描述符作為函數(shù)值返(cmd=F_DUPFD)。2,獲得/設置文件描述符標記,對應于filedes的文件描述符標志作為函數(shù)值返回。(cmd=F_GETFD或F_SETFD)。3,獲得/設置文件狀態(tài)標志,對應于filedes的文件狀態(tài)標志作為函數(shù)值返回。(cmd=F_GETFL或F_SETFL)。4,獲得/設置異步I/O有權(cmd=F_GETOWN或F_SETOWN)。5,獲得/設置記錄鎖(cmd=F_SETLK,F_SETLKW)。文件狀態(tài)標志說明O_RDONLY只讀打開O_WRONLY只寫打開O_RDWR讀/寫打開O_APPEND寫時都添加至文件尾O_NONBLOCK非阻塞方式O_SYNC等待寫完成O_ASYNC異步I/O2.9.2用fcntl給文件加鎖當多個用戶共同使用,操作一個文件的時候,linux通常采用的方法是給文件上鎖,來避免共享資源產(chǎn)生競爭的狀態(tài)。文件鎖包括建議鎖和強制性鎖。建議性鎖要求上鎖文件的進程都要檢測是否有鎖存在,并尊重已有的鎖。強制性鎖由內(nèi)核和系統(tǒng)執(zhí)行的鎖。Fcntl不僅可以實施建議性鎖且可以實施強制性鎖。2.9.3fcntl函數(shù)格式#inlude#inlude#inludeint fcntl(int filedes,int cmd,struct flock flockptr);Struct flock結構2.9.4flock結構說明1,所希望的鎖類型:F_RDLCK(共享讀鎖),F_WRLCK(獨占性寫鎖),F_UNLCK(解鎖一個區(qū)域)2,要加鎖或解鎖的區(qū)域的起始地址,有l(wèi)_start和l_whence兩者決定。l_stat是相對位移量(字節(jié)),l_whence則決定了相對位移量的起點。3,區(qū)域的長度,有l(wèi)_len表示。關于加鎖和解鎖區(qū)域的說明還要注意下列各點:1,該區(qū)域可以在當前文件尾端處開始或越過其尾端處開始,但是不能在文件起始位置之前開始或越過該起始位置。2,如若l_len為0,則表示鎖的區(qū)域從其起點(由l_start和l_whence決定)開始直至最大可能位置為止。也就是不管添寫到該文件中多少數(shù)據(jù),它都處于鎖的范圍。3,為了鎖整個文件,通常的方法是l_start說明為0,l_whence說明為SEEK_SET,l_len說明為0。2.10ioctl函數(shù)Ioctl函數(shù)式I/O操作的雜物箱。不能用本章中其他函數(shù)表示的I/O操作通常都能用ioctl表示。終端I/O是ioctl的最大使用方面,主要用于設備的I/O控制。#inlude#inludeint ioctl(int filedes,int request, );返回:若出錯則為-1,若成功則為其他值。3,select實現(xiàn)I/O復用3.1 I/O處理的五種模型1,阻塞I/O模型:若所調用的I/O函數(shù)沒有完成相關的功能就會使進程掛起,直到相關數(shù)據(jù)到達才會返回。如:終端,網(wǎng)絡設備的訪問。2,非阻塞模型:當請求的I/O操作不能完成時,則不讓進程休眠,而且返回一個錯誤。如:open,read,write訪問。3,I/O多路轉接模型:如果請求的I/O操作阻塞,且他不是真正阻塞I/O,而且讓其中的一個函數(shù)等待,在這期間,I/O還能進行其他操作。如:select函數(shù)。4,信號驅動I/O模型:在這種模型下,通過安裝一個信號處理程序,系統(tǒng)可以自動捕獲特定信號的到來,從而啟動I/O。5,異步I/O模型:在這種模型下,當一個描述符已準備好,可以啟動I/O時,進程會通知內(nèi)核。由內(nèi)核進行后續(xù)處理,這種用法現(xiàn)在較少。3.2 select函數(shù)傳送select的函數(shù)告訴內(nèi)核:(1) 我們所關心的描述符;(2) 對于每個描述符我們所關心的條件(是否讀一個給定的描述符?是否想寫一個給定的描述符?是否關心一個描述符的異常條件?)。(3) 希望等待多長時間(可以永遠等待,等待一個固定量時間,或完全不等待)。 從select返回時,內(nèi)核告訴我們:(1) 已準備好的描述符的數(shù)量。(2) 哪一個描述符已準備好讀,寫或異常條件。#inlude#inlude#inludeint select(int numfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout );返回:準備就緒的描述符數(shù),若超時則為0,若出錯則為-1。Timeout值:1,null:永遠等待,知道捕捉到信號或文件描述符已準備好為止;2,具體值:struct timeval類型的指針,若等待為timeout時間還沒有文件描述符準備好,就立即返回;3,0:從不等待,測試所有指定的描述符并立即返回;先說明最后一個參數(shù),它指定愿意等待的時間。Struct timevalLong tv_sec;/*seconds*/Long tv_usec;/*and microseconds*/;Select函數(shù)根據(jù)希望進行的文件操作對文件描述符進行分類處理,這里,對文件描述符的處理主要設計4個宏函數(shù):FD_ZERO(fd_set *set)清除一個文件描述符集;FD_SET(int fd,fd_set *set)將一個文件描述符加入文件描述符集中;FD_CLR(int fd,fd_set *set)將一個文件描述符從文件描述符集中清除;FD_ISSET(int fd,fd_set *
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 尿毒癥防治指南
- 信用專題培訓課件
- 中國耐熱壓制玻璃行業(yè)市場深度調查評估及投資方向研究報告
- 2025年中國電子地圖市場運行態(tài)勢及行業(yè)發(fā)展前景預測報告
- 2025年 榆林市特崗教師招聘考試筆試試題附答案
- 可折疊超薄玻璃項目立項可行性報告
- 2025年 貴州行測考試試題省考附答案
- 稅務師網(wǎng)盤課件出售
- 2025年中國超五類雙屏蔽網(wǎng)線行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國水體環(huán)境消毒劑行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2024年西藏公安機關招聘警務輔助人員筆試真題
- 2025-2030中國顯示驅動芯片行業(yè)競爭風險及前景發(fā)展創(chuàng)新研判報告
- 2024年昆明市公安局招聘勤務輔警真題
- 客房部內(nèi)部管理制度
- 口腔實習生崗前培訓課件
- 小學生數(shù)學學習習慣的培養(yǎng)講座
- DeepSeek+AI大模型賦能制造業(yè)智能化供應鏈解決方案
- 自動生成的文檔-202504081202-70
- 2025河南省豫地科技集團有限公司社會招聘169人筆試參考題庫附帶答案詳解析集合
- 鋼結構檢測管理制度
- T/SHPTA 030-2022民用航空器用聚氟乙烯基阻燃耐候復合裝飾膜
評論
0/150
提交評論