linux編程及應(yīng)用-任繼平-07第07章 linux進程管理與程序開發(fā)ppt課件_第1頁
linux編程及應(yīng)用-任繼平-07第07章 linux進程管理與程序開發(fā)ppt課件_第2頁
linux編程及應(yīng)用-任繼平-07第07章 linux進程管理與程序開發(fā)ppt課件_第3頁
linux編程及應(yīng)用-任繼平-07第07章 linux進程管理與程序開發(fā)ppt課件_第4頁
linux編程及應(yīng)用-任繼平-07第07章 linux進程管理與程序開發(fā)ppt課件_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第7章進程環(huán)境及進程屬性 進程環(huán)境及進程屬性進程環(huán)境及進程屬性 進程管理及控制進程管理及控制 Linux特殊進程特殊進程 2022-7-72進程資源 2022-7-73進程狀態(tài) 2022-7-74進程基本屬性 -進程號PID) 2022-7-75父進程號PPID) 2022-7-76進程組號PGID) 進程組是一個或多個進程的集合。它們與同一作業(yè)相關(guān)聯(lián),可以接受來自同一終端的各種信號關(guān)于信號的概念參閱第8章)。每個進程組都有唯一的進程組號,進程組號是可以在用戶層修改的。 2022-7-77會話 會話session是一個或多個進程組的集合。系統(tǒng)調(diào)用函數(shù)getsid()用來獲取某個進程的會話號SI

2、D。如果調(diào)用此函數(shù)的進程不是一個進程組的組長,則此函數(shù)會創(chuàng)建一個新會話:該進程變成新會話首進程session leader),會話首進程是創(chuàng)建該會話的進程。該進程成為一個新進程組的組長進程。新進程組PGID是該調(diào)用進程的PID。該進程沒有控制終端。如果在調(diào)用setsid之前該進程就有一個控制終端,那么這種聯(lián)系也會被中斷。 2022-7-78控制終端 會話和進程組有以下一些特點:(1一個會話可以有一個控制終端,建立與控制終端連接的會話首進程被稱為控制進程。(2一個會話中的幾個進程組可被分成一個前臺進程組和幾個后臺進程組,如果一個會話有一個控制終端,則它有一個前臺進程組。(3無論何時鍵入終端的中斷

3、鍵DELETE或Ctrl+C),就會將中斷信號發(fā)送給前臺進程組的所有進程,無論何時鍵入終端的退出鍵Ctrl+),就會將退出信號發(fā)送給前臺進程組的所有進程,如果終端檢測到調(diào)制解調(diào)器或網(wǎng)絡(luò)已經(jīng)斷開連接,則將掛斷信號發(fā)送給控制進程會話首進程)。2022-7-79終端處理函數(shù)2022-7-710進程用戶屬性 進程真實用戶號RUID) 真實用戶組號RGID)有效用戶號EUID)有效用戶組號EGID) 2022-7-711進程真實用戶號RUID) 2022-7-712進程有效用戶號EUID) EUID主要用于權(quán)限檢查。多數(shù)情況下,EUID和UID相同。如果可執(zhí)行文件的setuid位有效,在除該文件的擁有者

4、之外的用戶運行該程序時,EUID和UID則不相同。即當某可執(zhí)行文件設(shè)置了setgid位見文件屬性章節(jié)介紹后,任何用戶包括root用戶運行此程序時,其有效用戶組EUID為該文件的擁有者。 2022-7-713普通用戶能夠修改自己的密碼的原因 /etc/passwd文件用來存儲所有用戶信息,任何用戶都可以修改自己的密碼,顯然,其它用戶在執(zhí)行/usr/bin/passwd命令時修改了/etc/passwd文件并不是說可以使用vi編輯器修改),但是,通過查看/etc/passwd文件的權(quán)限,發(fā)現(xiàn)普通用戶對此文件僅有讀的權(quán)限。是什么原因?qū)е缕胀ㄓ脩艨梢孕薷?etc/passwd文件呢?這是因為用戶執(zhí)行“

5、/usr/bin/passwd命令時,/usr/bin/passwd文件設(shè)置了setuid位,在執(zhí)行此程序(/usr/bin/passwd時,該用戶所擁有的權(quán)限等同于文件“/usr/bin/passwd的擁有者root的權(quán)限,而root用戶擁有對/ect/passwd文件寫的權(quán)限,因此普通用戶可以通過/usr/bin/passwd來修改/etc/passwd文件的內(nèi)容。如果清除掉“/usr/bin/passwd文件的setuid權(quán)限位,普通用戶就不能修改自己的密碼了。 2022-7-714進程用戶組號GID) 創(chuàng)建進程的用戶所在的組號為該進程的進程用戶組號GID)??梢酝ㄟ^調(diào)用getgid()

6、函數(shù)來獲得當前進程的真實用戶組號GID)。 2022-7-715有效進程用戶組號EGID) 第7章進程環(huán)境及進程屬性 進程環(huán)境及進程屬性進程環(huán)境及進程屬性 進程管理及控制進程管理及控制 Linux特殊進程特殊進程 2022-7-717創(chuàng)建進程 fork函數(shù)調(diào)用成功后,其子進程會復(fù)制父進程的幾乎所有信息除PID等信息),主發(fā)復(fù)制父親進程的代碼段、數(shù)據(jù)段、BSS、堆、棧關(guān)于進程結(jié)構(gòu)參閱本書第3章)、打開的文件描述符但共用同一個文件表項)。另外,子進程從父進程繼承下列屬性:實際用戶/組號、有效用戶/組號以及保留的用戶/組號、進程組號、環(huán)境變量、對文件的執(zhí)行時關(guān)閉標志、信號處理方式設(shè)置、信號掩碼、當前

7、工作目錄、根目錄、文件模式創(chuàng)建掩碼、文件大小限制等信息。2022-7-718例如2022-7-719對打開文件的處理 2022-7-720驗證fork是否在子進程復(fù)制驗證代碼驗證數(shù)據(jù)段使用全局、靜態(tài)初始化變量),BSS段未初始化全局,靜態(tài)變量),棧局部變量),堆malloc返回空間)。代碼見教材。2022-7-721vfork /* Clone the calling process, but without copying the whole address space. The calling process is suspended until the new process exits

8、 or is replaced by a call to execve. Return -1 for errors, 0 to the new process, and the process ID of the new process to the old process. */extern _pid_t vfork (void) ;#endif 2022-7-722Vfork與fork比較驗證代碼見教材代碼。2022-7-723execX函數(shù)執(zhí)行新代碼2022-7-724execX函數(shù)比較函數(shù)使用文件名使用路徑名使用參數(shù)表(函數(shù)出現(xiàn)字母l)使用argv(函數(shù)出現(xiàn)字母v) execl exe

9、clp execle execvexecvp execve2022-7-725執(zhí)行新代碼對打開文件的處理 在執(zhí)行exec系列函數(shù)時,默認情況下,新代碼對于可以使用在原來代碼中打開的文件描述符,即執(zhí)行exec系列函數(shù)時,并不關(guān)閉原來的文件描述符。 但如果調(diào)用fcntl函數(shù)即關(guān)閉FD_CLOEXEC項,則在執(zhí)行execX系列函數(shù)后將關(guān)閉原來打開的文件描述符。 2022-7-726等待進程結(jié)束 調(diào)用wait()函數(shù)的父親進程將等待該進程的任意一個子進程結(jié)束后才繼續(xù)執(zhí)行如果有多個子進程,只需要等待其中的一個進程)。 2022-7-727waitpid2022-7-728退出進程 可以通過以下方式結(jié)束進

10、程。向exit或_exit發(fā)布一個調(diào)用。在main函數(shù)中執(zhí)行return。隱含的離開main函數(shù)。2022-7-729函數(shù)說明2022-7-730示例代碼2022-7-731exit 與_exit2022-7-732exit與return的區(qū)別 C語言關(guān)鍵字與函數(shù)exit()在main函數(shù)退出時有相似之處,但兩者有本質(zhì)的區(qū)別:return 退出當前函數(shù)主體,exit()函數(shù)退出當前進程,因此,在main函數(shù)里面return(0)和exit(0)完成一樣的功能。return僅僅從子函數(shù)中返回,而子進程用exit()退出,調(diào)用exit()時要調(diào)用一段終止處理程序,然后關(guān)閉所有I/O流。2022-7

11、-733示例代碼2022-7-734修改進程用戶相關(guān)信息 access核實用戶權(quán)限 2022-7-735設(shè)置進程真實用戶RUID 2022-7-736設(shè)置進程有效用戶EUID 第7章進程環(huán)境及進程屬性 進程環(huán)境及進程屬性進程環(huán)境及進程屬性 進程管理及控制進程管理及控制 Linux特殊進程特殊進程 2022-7-738守候進程 守護進程Daemon是運行在后臺的一種特殊進程,其脫離于終端,之所以脫離于終端是為了避免進程被任何終端所產(chǎn)生的信息所打斷,其在執(zhí)行過程中的信息也不在任何終端上顯示。守候進程周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件,Linux的大多數(shù)服務(wù)器就是用守護進程實現(xiàn)的。比如,Internet服務(wù)器inetd,Web服務(wù)器httpd等。一般情況下,守護進程可以通過以下方式啟動:在系統(tǒng)啟動時由啟動腳本啟動,這些啟動腳本通常放在/etc/rc.d目錄下;利用inetd超級服務(wù)器啟動,如telnet等;由cron定時啟動以及在終端用nohup啟動的進程也是守護進程。2022-7-739守護進程編程要點 2022-7-740守護進程編程要點2022-7-741守護進程編程要點202

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論