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

下載本文檔

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

文檔簡介

嵌入式操作系統(tǒng)應(yīng)用開發(fā)--Linux程序設(shè)計陳曉雷

第6章

進(jìn)程控制6.1進(jìn)程標(biāo)識6.2進(jìn)程創(chuàng)建6.3執(zhí)行一個新程序6.4等待進(jìn)程完成6.5進(jìn)程終止與僵死進(jìn)程6.6

system()函數(shù)6.7進(jìn)程組6.8會晤期6.9控制終端6.10作業(yè)控制36.1進(jìn)程標(biāo)識進(jìn)程ID(PID):唯一正整數(shù)0-MAXPID-1幾個特殊進(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會晤期ID和控制終端調(diào)整用戶ID標(biāo)志和調(diào)整組ID標(biāo)志當(dāng)前工作目錄和根目錄文件創(chuàng)建屏蔽mask信號屏蔽與設(shè)置任何打開的文件描述字的執(zhí)行時關(guān)閉標(biāo)志FD_CLOEXEC環(huán)境變量所有相連的共享存儲段資源限制56.2進(jìn)程創(chuàng)建子進(jìn)程與父進(jìn)程不同的的特殊屬性:子進(jìn)程有它自己唯一的PID有各自不同的父進(jìn)程ID子進(jìn)程具有其父進(jìn)程的打開文件描述字副本子進(jìn)程已耗時的各種時間(tms_x)均置為0子進(jìn)程不繼承父進(jìn)程設(shè)置的文件鎖子進(jìn)程不繼承父進(jìn)程設(shè)置的定時器,任何懸掛的定時器均被清除父進(jìn)程的任何懸掛信號在子進(jìn)程中都被清除,但子進(jìn)程從父進(jìn)程繼承它的信號屏蔽和信號動作fork()使用的兩種情況網(wǎng)絡(luò)服務(wù)fork()exec()執(zhí)行另一個程序pid_tvfork(void);66.3執(zhí)行一個新程序加載函數(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:無子進(jìn)程,或被信號中斷參數(shù):stat_loc終止?fàn)顟B(tài):出口狀態(tài)、信號數(shù)、其他信息相關(guān)宏表6-186.4等待進(jìn)程完成例:p6-3.cp6-4.cwaitpid()參數(shù)pid==-1:等待任意子進(jìn)程,等價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絕對值的任意子進(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()信號中斷106.5進(jìn)程終止與僵死進(jìn)程進(jìn)程終止時,內(nèi)核完成的動作關(guān)閉所有打開的文件釋放進(jìn)程的存儲空間和其他資源在進(jìn)程的proc結(jié)構(gòu)中保存資源的使用統(tǒng)計和終止?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信號一般需要父進(jìn)程調(diào)用wait()來“收尸”例:p6-6.cp6-7.c116.6system()函數(shù)一個進(jìn)程執(zhí)行另一個程序的三個步驟派生一個子進(jìn)程fork()由子進(jìn)程調(diào)用加載類函數(shù)exec()等待子進(jìn)程執(zhí)行完畢wait()單一調(diào)用函數(shù)intsystem(constchar*command);三種不同的返回值127:不能啟動sh-1:其他錯誤shell終止?fàn)顟B(tài):成功system()優(yōu)缺點(diǎn)例:p6-8.c126.7進(jìn)程組屬于shell單條命令的進(jìn)程稱為一個進(jìn)程組或作業(yè)gcc-cfoo.c(gcc、cpp、ccl、as、ld)catmyfile.nr|pic|tbl|troff–ms|lp&單條命令(cctanman.c;cpfile1file2;echodone>newfile)前臺進(jìn)程組、后臺進(jìn)程組(后臺命令&)進(jìn)程組ID—PGIDpid_t進(jìn)程組組長組長的PID與PGID相同組長可以創(chuàng)建一個進(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)核可以對一個組中所有進(jìn)程采取一致行動Ctrl-c146.8會晤期會晤期是一至多個進(jìn)程組的集合每一個進(jìn)程屬于一個會晤期和一個進(jìn)程組正常情況下,由一次注冊產(chǎn)生的所有進(jìn)程屬于同一個會晤期。圖6-1會晤期主席:創(chuàng)建會晤期的進(jìn)程pid_tsetsid(void);--創(chuàng)建一個新的會晤期156.9控制終端控制終端(注冊終端)--進(jìn)程通過控制終端進(jìn)行輸入、輸出和控制作業(yè)的運(yùn)行控制終端與會晤期、進(jìn)程組以及進(jìn)程之間有如下關(guān)系:P166/dev/ttychar*ctermid(char*ptr);可直接讀寫/dev/tty以避免重定向與終端相連的前臺進(jìn)程組的組IDpid_ttcgetpgrp(intfd);inttcsetpgrp(intfd,pid_tpgrpid);166.10作業(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

提交評論