




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式操作系統(tǒng)應(yīng)用開(kāi)發(fā)--Linux程序設(shè)計(jì)陳曉雷
第6章
進(jìn)程控制6.1進(jìn)程標(biāo)識(shí)6.2進(jìn)程創(chuàng)建6.3執(zhí)行一個(gè)新程序6.4等待進(jìn)程完成6.5進(jìn)程終止與僵死進(jìn)程6.6
system()函數(shù)6.7進(jìn)程組6.8會(huì)晤期6.9控制終端6.10作業(yè)控制36.1進(jìn)程標(biāo)識(shí)進(jìn)程ID(PID):唯一正整數(shù)0-MAXPID-1幾個(gè)特殊進(jìn)程:調(diào)度進(jìn)程PID=0,init進(jìn)程PID=1pid_t類型:int#include<sys/types.h>#include<unistd.h>pid_tgetpid(void);pid_tgetppid(void);6.2進(jìn)程創(chuàng)建#include<sys/types.h>#include<unistd.h>pid_tfork(void);進(jìn)程之間的層次關(guān)系:父進(jìn)程、子進(jìn)程fork()成功返回子進(jìn)程:0父進(jìn)程:子進(jìn)程的PIDfork()失敗返回:-1,并置errno例:p6-1.c46.2進(jìn)程創(chuàng)建子進(jìn)程克隆父進(jìn)程繼承的特征:UID、GID、EUID、EGID、附加GID會(huì)晤期ID和控制終端調(diào)整用戶ID標(biāo)志和調(diào)整組ID標(biāo)志當(dāng)前工作目錄和根目錄文件創(chuàng)建屏蔽mask信號(hào)屏蔽與設(shè)置任何打開(kāi)的文件描述字的執(zhí)行時(shí)關(guān)閉標(biāo)志FD_CLOEXEC環(huán)境變量所有相連的共享存儲(chǔ)段資源限制56.2進(jìn)程創(chuàng)建子進(jìn)程與父進(jìn)程不同的的特殊屬性:子進(jìn)程有它自己唯一的PID有各自不同的父進(jìn)程ID子進(jìn)程具有其父進(jìn)程的打開(kāi)文件描述字副本子進(jìn)程已耗時(shí)的各種時(shí)間(tms_x)均置為0子進(jìn)程不繼承父進(jìn)程設(shè)置的文件鎖子進(jìn)程不繼承父進(jìn)程設(shè)置的定時(shí)器,任何懸掛的定時(shí)器均被清除父進(jìn)程的任何懸掛信號(hào)在子進(jìn)程中都被清除,但子進(jìn)程從父進(jìn)程繼承它的信號(hào)屏蔽和信號(hào)動(dòng)作fork()使用的兩種情況網(wǎng)絡(luò)服務(wù)fork()exec()執(zhí)行另一個(gè)程序pid_tvfork(void);66.3執(zhí)行一個(gè)新程序加載函數(shù)exec()externchar**environintexecl(constchar*path,constchar*arg0,…,(char*)0);intexeclp(constchar*file,constchar*arg0,…,(char*)0);intexecle(constchar*path,constchar*arg0,…,,(char*)0,constchar*envp[]);intexecv(constchar*path,constchar*argv[]);intexecvp(constchar*file,constchar*argv[]);intexecve(constchar*path,constchar*argv[],constchar*envp[]);注意:成功:不返回,失敗:-1、errno凡是與進(jìn)程有關(guān)的屬性保持不變,與程序映像有關(guān)的屬性變例:p6-2.c76.4等待進(jìn)程完成等待子進(jìn)程的終止和獲得子進(jìn)程的出口狀態(tài)信息pid_twait(int*stat_loc);pid_twaitpid(pid_tpid,int*stat_loc,intoptions);wait()的返回pid阻塞-1:無(wú)子進(jìn)程,或被信號(hào)中斷參數(shù):stat_loc終止?fàn)顟B(tài):出口狀態(tài)、信號(hào)數(shù)、其他信息相關(guān)宏表6-186.4等待進(jìn)程完成例:p6-3.cp6-4.cwaitpid()參數(shù)pid==-1:等待任意子進(jìn)程,等價(jià)wait()pid>0:等待進(jìn)程ID為pid的子進(jìn)程pid==0:等待進(jìn)程組ID與調(diào)用進(jìn)程的進(jìn)程組ID相同的任意子進(jìn)程pid<-1:等待進(jìn)程組ID等于pid絕對(duì)值的任意子進(jìn)程options:控制位串:0、WNOHANG、WUNTRACED例:p6-5.c函數(shù)wait3()、wait4()96.5進(jìn)程終止與僵死進(jìn)程進(jìn)程終止方式正常終止main()返回調(diào)用exit()調(diào)用_exit()—直接返回內(nèi)核異常終止調(diào)用abort()信號(hào)中斷106.5進(jìn)程終止與僵死進(jìn)程進(jìn)程終止時(shí),內(nèi)核完成的動(dòng)作關(guān)閉所有打開(kāi)的文件釋放進(jìn)程的存儲(chǔ)空間和其他資源在進(jìn)程的proc結(jié)構(gòu)中保存資源的使用統(tǒng)計(jì)和終止?fàn)顟B(tài)將進(jìn)出狀態(tài)改變?yōu)镾ZOMB(即僵死狀態(tài)),并將proc結(jié)構(gòu)置于僵死進(jìn)程表中使init進(jìn)程繼承終止進(jìn)程的所有活躍子進(jìn)程,init成為父進(jìn)程向父進(jìn)程發(fā)送SIGCHID信號(hào)一般需要父進(jìn)程調(diào)用wait()來(lái)“收尸”例:p6-6.cp6-7.c116.6system()函數(shù)一個(gè)進(jìn)程執(zhí)行另一個(gè)程序的三個(gè)步驟派生一個(gè)子進(jìn)程fork()由子進(jìn)程調(diào)用加載類函數(shù)exec()等待子進(jìn)程執(zhí)行完畢wait()單一調(diào)用函數(shù)intsystem(constchar*command);三種不同的返回值127:不能啟動(dòng)sh-1:其他錯(cuò)誤shell終止?fàn)顟B(tài):成功system()優(yōu)缺點(diǎn)例:p6-8.c126.7進(jìn)程組屬于shell單條命令的進(jìn)程稱為一個(gè)進(jìn)程組或作業(yè)gcc-cfoo.c(gcc、cpp、ccl、as、ld)catmyfile.nr|pic|tbl|troff–ms|lp&單條命令(cctanman.c;cpfile1file2;echodone>newfile)前臺(tái)進(jìn)程組、后臺(tái)進(jìn)程組(后臺(tái)命令&)進(jìn)程組ID—PGIDpid_t進(jìn)程組組長(zhǎng)組長(zhǎng)的PID與PGID相同組長(zhǎng)可以創(chuàng)建一個(gè)進(jìn)程組、創(chuàng)建組內(nèi)的進(jìn)程、以及終止它們進(jìn)程組的生命期136.7進(jìn)程組獲取和設(shè)置進(jìn)程的進(jìn)程組IDpid_tgetpgrp(void);intsetpgid(pid_tpid,pid_tpgid);操作的限制內(nèi)核可以對(duì)一個(gè)組中所有進(jìn)程采取一致行動(dòng)Ctrl-c146.8會(huì)晤期會(huì)晤期是一至多個(gè)進(jìn)程組的集合每一個(gè)進(jìn)程屬于一個(gè)會(huì)晤期和一個(gè)進(jìn)程組正常情況下,由一次注冊(cè)產(chǎn)生的所有進(jìn)程屬于同一個(gè)會(huì)晤期。圖6-1會(huì)晤期主席:創(chuàng)建會(huì)晤期的進(jìn)程pid_tsetsid(void);--創(chuàng)建一個(gè)新的會(huì)晤期156.9控制終端控制終端(注冊(cè)終端)--進(jìn)程通過(guò)控制終端進(jìn)行輸入、輸出和控制作業(yè)的運(yùn)行控制終端與會(huì)晤期、進(jìn)程組以及進(jìn)程之間有如下關(guān)系:P166/dev/ttychar*ctermid(char*ptr);可直接讀寫(xiě)/dev/tty以避免重定向與終端相連的前臺(tái)進(jìn)程組的組IDpid_ttcgetpgrp(intfd);inttcsetpgrp(intfd,pid_tpgrpid);166.10作業(yè)控制作業(yè)控制指
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)科技創(chuàng)新培訓(xùn)
- 肺結(jié)核合并心力衰竭的護(hù)理
- 語(yǔ)音廳新人培訓(xùn):從零開(kāi)始到主播之路
- 幼兒健康領(lǐng)域安全教育
- 整體護(hù)理查房標(biāo)準(zhǔn)化操作流程
- 造口護(hù)理查房
- 腫瘤住院患者的心理護(hù)理
- 中風(fēng)病人發(fā)燒護(hù)理常規(guī)
- 銷售業(yè)績(jī)培訓(xùn)
- 職業(yè)健康體檢質(zhì)量管理
- (高清版)DZT 0212.4-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 鹽類 第4部分:深藏鹵水鹽類
- 粉塵防爆安全操作規(guī)程范文
- 《快速原型制造》課件
- 監(jiān)理抽檢表 - 06防護(hù)支擋工程
- 微生物學(xué)周德慶第四版答案
- 國(guó)家中小學(xué)智慧教育平臺(tái)培訓(xùn)專題講座
- 南郵組織行為學(xué)期末復(fù)習(xí)題
- 物業(yè)工程維修作業(yè)安全操作指南
- 農(nóng)村醫(yī)生個(gè)人工作簡(jiǎn)歷表
- 裝修常用數(shù)據(jù)手冊(cè)(空間布局和尺寸)
- 寬城滿族自治縣深利方解石有限公司老亮子方解石、石灰?guī)r礦采礦權(quán)出讓收益評(píng)估報(bào)告
評(píng)論
0/150
提交評(píng)論