Linux程序設(shè)計第6章_第1頁
Linux程序設(shè)計第6章_第2頁
Linux程序設(shè)計第6章_第3頁
Linux程序設(shè)計第6章_第4頁
Linux程序設(shè)計第6章_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式操作系統(tǒng)應(yīng)用開發(fā)嵌入式操作系統(tǒng)應(yīng)用開發(fā)-Linux程序設(shè)計程序設(shè)計陳曉雷第第6章章 進(jìn)程控制進(jìn)程控制n6.1進(jìn)程標(biāo)識n6.2進(jìn)程創(chuàng)建n6.3執(zhí)行一個新程序n6.4 等待進(jìn)程完成n6.5進(jìn)程終止與僵死進(jìn)程n6.6system()函數(shù)n6.7進(jìn)程組n6.8會晤期n6.9控制終端n6.10作業(yè)控制36.1進(jìn)程標(biāo)識進(jìn)程標(biāo)識l進(jìn)程進(jìn)程ID(PID):唯一正整數(shù):唯一正整數(shù)0-MAXPID-1l幾個特殊進(jìn)程:調(diào)度進(jìn)程幾個特殊進(jìn)程:調(diào)度進(jìn)程PID=0,init進(jìn)程進(jìn)程PID=1lpid_t類型類型: intl#include l#include lpid_t getpid(void);lpid_t g

2、etppid(void);6.2進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建l#include l#include lpid_t fork(void);l進(jìn)程之間的層次關(guān)系:父進(jìn)程、子進(jìn)程進(jìn)程之間的層次關(guān)系:父進(jìn)程、子進(jìn)程lfork()成功返回成功返回l子進(jìn)程:子進(jìn)程:0l父進(jìn)程:子進(jìn)程的父進(jìn)程:子進(jìn)程的PIDlfork()失敗返回:失敗返回:-1,并置,并置errnol例:例:p6-1.c46.2進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建l子進(jìn)程克隆父進(jìn)程子進(jìn)程克隆父進(jìn)程l繼承的特征:繼承的特征:lUID、GID、EUID、EGID、附加、附加GIDl會晤期會晤期ID和控制終端和控制終端l調(diào)整用戶調(diào)整用戶ID標(biāo)志和調(diào)整組標(biāo)志和調(diào)整組ID標(biāo)志標(biāo)志

3、l當(dāng)前工作目錄和根目錄當(dāng)前工作目錄和根目錄l文件創(chuàng)建屏蔽文件創(chuàng)建屏蔽maskl信號屏蔽與設(shè)置信號屏蔽與設(shè)置l任何打開的文件描述字的執(zhí)行時關(guān)閉標(biāo)志任何打開的文件描述字的執(zhí)行時關(guān)閉標(biāo)志FD_CLOEXECl環(huán)境變量環(huán)境變量l所有相連的共享存儲段所有相連的共享存儲段l資源限制資源限制56.2進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建l子進(jìn)程與父進(jìn)程不同的的特殊屬性:子進(jìn)程與父進(jìn)程不同的的特殊屬性:l子進(jìn)程有它自己唯一的子進(jìn)程有它自己唯一的PIDl有各自不同的父進(jìn)程有各自不同的父進(jìn)程IDl子進(jìn)程具有其父進(jìn)程的打開文件描述字副本子進(jìn)程具有其父進(jìn)程的打開文件描述字副本l子進(jìn)程已耗時的各種時間子進(jìn)程已耗時的各種時間(tms_x)均置

4、為均置為0l子進(jìn)程不繼承父進(jìn)程設(shè)置的文件鎖子進(jìn)程不繼承父進(jìn)程設(shè)置的文件鎖l子進(jìn)程不繼承父進(jìn)程設(shè)置的定時器,任何懸掛的定時器均被清除子進(jìn)程不繼承父進(jìn)程設(shè)置的定時器,任何懸掛的定時器均被清除l父進(jìn)程的任何懸掛信號在子進(jìn)程中都被清除,但子進(jìn)程從父進(jìn)程父進(jìn)程的任何懸掛信號在子進(jìn)程中都被清除,但子進(jìn)程從父進(jìn)程繼承它的信號屏蔽和信號動作繼承它的信號屏蔽和信號動作lfork()使用的兩種情況使用的兩種情況l網(wǎng)絡(luò)服務(wù)網(wǎng)絡(luò)服務(wù)lfork()exec()執(zhí)行另一個程序執(zhí)行另一個程序lpid_t vfork(void);66.3執(zhí)行一個新程序執(zhí)行一個新程序l加載函數(shù)加載函數(shù)exec()lextern char *e

5、nvironlint execl(const char *path, const char *arg0, , (char *)0);lint execlp(const char *file, const char *arg0, , (char *)0);lint execle(const char *path,const char *arg0, ,(char *)0, const char *envp);lint execv(const char *path, const char *argv);lint execvp(const char *file, const char *argv);

6、lint execve(const char *path, const char *argv, const char *envp);l注意:成功:不返回,失?。鹤⒁猓撼晒Γ翰环祷?,失?。?1、errnol凡是與進(jìn)程有關(guān)的屬性保持不變,與程序映像有關(guān)的屬性變凡是與進(jìn)程有關(guān)的屬性保持不變,與程序映像有關(guān)的屬性變l例:例:p6-2.c76.4 等待進(jìn)程完成等待進(jìn)程完成l等待子進(jìn)程的終止和獲得子進(jìn)程的出口狀態(tài)信息等待子進(jìn)程的終止和獲得子進(jìn)程的出口狀態(tài)信息lpid_t wait(int *stat_loc);lpid_t waitpid(pid_t pid, int *stat_loc, int opt

7、ions);lwait()的返回的返回lpidl阻塞阻塞l-1:無子進(jìn)程,或被信號中斷:無子進(jìn)程,或被信號中斷l(xiāng)參數(shù):參數(shù):stat_locl終止?fàn)顟B(tài):出口狀態(tài)、信號數(shù)、其他信息終止?fàn)顟B(tài):出口狀態(tài)、信號數(shù)、其他信息l相關(guān)宏相關(guān)宏 表表6-186.4 等待進(jìn)程完成等待進(jìn)程完成l例:例:p6-3.c p6-4.clwaitpid()參數(shù)參數(shù)lpid=-1: 等待任意子進(jìn)程,等價等待任意子進(jìn)程,等價wait()lpid0: 等待進(jìn)程等待進(jìn)程ID為為pid的子進(jìn)程的子進(jìn)程lpid=0:等待進(jìn)程組等待進(jìn)程組ID與調(diào)用進(jìn)程的進(jìn)程組與調(diào)用進(jìn)程的進(jìn)程組ID相同的任意子進(jìn)程相同的任意子進(jìn)程lpidnewfile

8、)l前臺進(jìn)程組、后臺進(jìn)程組(后臺命令前臺進(jìn)程組、后臺進(jìn)程組(后臺命令&)l進(jìn)程組進(jìn)程組IDPGID pid_tl進(jìn)程組組長進(jìn)程組組長l組長的組長的PID與與PGID相同相同l組長可以創(chuàng)建一個進(jìn)程組、創(chuàng)建組內(nèi)的進(jìn)程、以及終止它們組長可以創(chuàng)建一個進(jìn)程組、創(chuàng)建組內(nèi)的進(jìn)程、以及終止它們l進(jìn)程組的生命期進(jìn)程組的生命期136.7進(jìn)程組進(jìn)程組l獲取和設(shè)置進(jìn)程的進(jìn)程組獲取和設(shè)置進(jìn)程的進(jìn)程組IDlpid_t getpgrp(void);lint setpgid(pid_t pid, pid_t pgid);l操作的限制操作的限制l內(nèi)核可以對一個組中所有進(jìn)程采取一致行動內(nèi)核可以對一個組中所有進(jìn)程采取一致行

9、動lCtrl-c146.8會晤期會晤期l會晤期是一至多個進(jìn)程組的集合會晤期是一至多個進(jìn)程組的集合l每一個進(jìn)程屬于一個會晤期和一個進(jìn)程組每一個進(jìn)程屬于一個會晤期和一個進(jìn)程組l正常情況下,由一次注冊產(chǎn)生的所有進(jìn)程屬于正常情況下,由一次注冊產(chǎn)生的所有進(jìn)程屬于同一個會晤期。圖同一個會晤期。圖6-1l會晤期主席:創(chuàng)建會晤期的進(jìn)程會晤期主席:創(chuàng)建會晤期的進(jìn)程lpid_t setsid(void);-創(chuàng)建一個新的會晤期創(chuàng)建一個新的會晤期156.9控制終端控制終端l控制終端(注冊終端)控制終端(注冊終端)-進(jìn)程通過控制終端進(jìn)進(jìn)程通過控制終端進(jìn)行輸入、輸出和控制作業(yè)的運行行輸入、輸出和控制作業(yè)的運行l(wèi)控制終端與

10、會晤期、進(jìn)程組以及進(jìn)程之間有如控制終端與會晤期、進(jìn)程組以及進(jìn)程之間有如下關(guān)系:下關(guān)系:P166l/dev/ttylchar *ctermid(char *ptr);l可直接讀寫可直接讀寫/dev/tty以避免重定向以避免重定向l與終端相連的前臺進(jìn)程組的組與終端相連的前臺進(jìn)程組的組IDlpid_t tcgetpgrp(int fd);lint tcsetpgrp(int fd, pid_t pgrpid);166.10作業(yè)控制作業(yè)控制l作業(yè)控制指的是允許用戶在單個會晤期內(nèi)的多作業(yè)控制指的是允許用戶在單個會晤期內(nèi)的多個進(jìn)程組之間切換的機(jī)制個進(jìn)程組之間切換的機(jī)制l作業(yè)控制允許用戶同時控制多個進(jìn)程作業(yè)控制允許用戶同時控制多個進(jìn)程l利用作業(yè)控制,用戶可以掛起一個正在執(zhí)行的利用作業(yè)控制,用戶可以掛起一個正在執(zhí)行的作業(yè)、將作業(yè)放置

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論