Linux 下C 編程基礎——1 進程控制_第1頁
Linux 下C 編程基礎——1 進程控制_第2頁
Linux 下C 編程基礎——1 進程控制_第3頁
Linux 下C 編程基礎——1 進程控制_第4頁
Linux 下C 編程基礎——1 進程控制_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2021-8-9Page 1 2021-8-9Page 2 1、概念: 進程就是運行中的程序,一個運行著的 程序,可能有多個進程。 進程是一個動態(tài)的實體,是程序的一次執(zhí)行 過程。操作系統(tǒng)最核心的概念就是進程。 進程是操作系統(tǒng)資源分配的基本單位。操作 系統(tǒng)借助于進程來管理計算機的軟、硬件資 源,支持多任務的并行執(zhí)行。 2021-8-9Page 3 2、進程與程序、線程區(qū)別 進程是動態(tài)的,程序是表態(tài)的 進程是運行中的程序,程序是一 些保存在硬盤上的可執(zhí)行的代碼。 進程由線程構成 2021-8-9Page 4 3、進程進程的實體結構的實體結構 進程控制塊PCB 程序段 數(shù)據(jù)段 2021-8-9Pag

2、e 5 4、進程控制塊進程控制塊PCB (1)進程控制塊是進程動態(tài)實體的構成部分,不 包含于程序的二進制代碼中。 (2)進程控制塊位于系統(tǒng)的內核內存區(qū)域中,是 操作系統(tǒng)中的重要記錄型數(shù)據(jù)結構。 (3)進程控制塊是進程存在的唯一標志。 (4)進程控制塊用于描述進程進展情況及控制進 程運行所需的全部信息,具體包括: 進程描述信息:進程標識符、隸屬用戶名或用戶標識號等; 進程調度信息:進程狀態(tài)、進程優(yōu)先級、阻塞事件等; 進程控制信息:程序及數(shù)據(jù)地址、進程同步和通信機制等。 2021-8-9Page 6 5、進程標識、進程標識 Linux操作系統(tǒng)中,每個進程都是通過 唯一的進程ID標識。進程ID是一個

3、非負數(shù)。 每個進程除了進程ID外還有一些其他標識信 息,它們都可以通過相應的函數(shù)獲得。這些 函數(shù)的聲明在unistd.h頭文件中。 獲取進程各種標識符的函數(shù)獲取進程各種標識符的函數(shù) (1)getpid( ) pid_t getpid(void); 功能功能:獲得當前進程獲得當前進程ID (2)getppid( ) pid_t getppid(void); 功能功能:獲得進程父進程的獲得進程父進程的ID; 2021-8-9Page 7 6、Linux進程狀態(tài) (1)可運行狀態(tài)可運行狀態(tài) (2)可中斷睡眠狀態(tài)可中斷睡眠狀態(tài) (3)不可中斷睡眠狀態(tài)不可中斷睡眠狀態(tài) (4)暫停狀態(tài)暫停狀態(tài) (5)僵死

4、狀態(tài)僵死狀態(tài) 2021-8-9Page 8 (1) 可運行狀態(tài)可運行狀態(tài) 當進程當進程正在被CPU執(zhí)行,或已經(jīng),或已經(jīng)準備就 緒隨時可由調度程序執(zhí)行,則稱該進程為處,則稱該進程為處 于運行狀態(tài)(于運行狀態(tài)(running)。進程可以在內核態(tài))。進程可以在內核態(tài) 運行,也可以在用戶態(tài)運行。當系統(tǒng)資源已運行,也可以在用戶態(tài)運行。當系統(tǒng)資源已 經(jīng)可用時,進程就被喚醒而進入準備運行狀經(jīng)可用時,進程就被喚醒而進入準備運行狀 態(tài),該狀態(tài)稱為態(tài),該狀態(tài)稱為就緒態(tài)。這些狀態(tài)態(tài)。這些狀態(tài)在內核中 表示方法相同, 都被稱為處于都被稱為處于 TASK_RUNNING 狀態(tài)。狀態(tài)。 2021-8-9Page 9 (2

5、)可中斷睡眠狀態(tài)可中斷睡眠狀態(tài) 當進程處于可中斷等待狀態(tài)時,系當進程處于可中斷等待狀態(tài)時,系 統(tǒng)不會調度該進行執(zhí)行。當系統(tǒng)統(tǒng)不會調度該進行執(zhí)行。當系統(tǒng)產生一 個中斷或者釋放了進程正在等待的資源, 或者進程收到一個信號,都可以喚醒進,都可以喚醒進 程轉換到就緒狀態(tài)(運行狀態(tài))。程轉換到就緒狀態(tài)(運行狀態(tài))。 2021-8-9Page 10 (3)不可中斷睡眠狀態(tài)不可中斷睡眠狀態(tài) 與可中斷睡眠狀態(tài)類似。但處于該與可中斷睡眠狀態(tài)類似。但處于該 狀態(tài)的進程只有狀態(tài)的進程只有被使用wake_up()函數(shù)明確 喚醒時才能轉換到可運行的就緒狀態(tài)。時才能轉換到可運行的就緒狀態(tài)。 2021-8-9Page 11

6、 (4)暫停狀態(tài)暫停狀態(tài) 當進程收到信號當進程收到信號 SIGSTOP、 SIGTSTP、SIGTTIN 或 SIGTTOU 時就會時就會 進入暫停狀態(tài)??上蚱浒l(fā)送進入暫停狀態(tài)??上蚱浒l(fā)送SIGCONT信號信號 讓進程轉換到可運行狀態(tài)。處于該狀態(tài)的讓進程轉換到可運行狀態(tài)。處于該狀態(tài)的 進程將被進程將被作為進程終止來處理。來處理。 2021-8-9Page 12 (5)僵死狀態(tài)僵死狀態(tài) 當進程已停止運行,但其父進程還沒有詢問其 狀態(tài)時,則稱該進程處于僵死狀態(tài)。當一個進程的 運行時間片用完,系統(tǒng)就會使用調度程序強制切換 到其它的進程去執(zhí)行。另外,如果進程在內核態(tài)執(zhí) 行時需要等待系統(tǒng)的某個資源,此時

7、該進程就會調 用 sleep_on()或 sleep_on_interruptible()自愿地放CPU 的使用權,而讓調度程序去執(zhí)行其它進。進程則進 入睡眠狀態(tài)(TASK_UNINTERRUPTIBLE 或 TASK_INTERRUPTIBLE)。 只有當進程從“內核 運行態(tài)”轉移到“睡眠狀態(tài)”時,內核才會進行進 程切換操作。 2021-8-9Page 13 進程狀態(tài)的關系圖:進程狀態(tài)的關系圖: 2021-8-9Page 14 7.2.1 Linux進程的結構進程的結構 2021-8-9Page 15 代碼段代碼段存放程序程序的可執(zhí)行代碼存放程序程序的可執(zhí)行代碼 數(shù)據(jù)段數(shù)據(jù)段initiali

8、zed data存放程序已經(jīng)初始化的全局變量、常存放程序已經(jīng)初始化的全局變量、常 量、靜態(tài)變量量、靜態(tài)變量 uninitialized data存放程序存放程序未初始化未初始化的全局變量、靜態(tài)的全局變量、靜態(tài) 變量變量 堆棧段堆棧段棧棧用于函數(shù)調用,存放著函數(shù)的參數(shù)、用于函數(shù)調用,存放著函數(shù)的參數(shù)、 函數(shù)內部定義的局部變量函數(shù)內部定義的局部變量 堆堆存放動態(tài)分配的內存變量存放動態(tài)分配的內存變量 7.2.2 Linux進程的結構內存布局進程的結構內存布局 2021-8-9Page 16 例題:demo1 1. ps 進程狀態(tài)查詢命令進程狀態(tài)查詢命令 命令格式:命令格式: ps 選項選項 常用選項

9、:常用選項: a 顯示所有用戶進程。 e 顯示進程環(huán)境變量。 l 給出長列表。 r 只顯示正在運行的進程。 S 增加CPU時間和頁面出錯。 w 按寬格式顯示輸出。默認情況下,如果輸出結果不能在一行里 顯示,將會縮短結果輸出。使用這個選項可以避免這個問題。 txx 只顯示受tty.xx控制的進程。 u 打印用戶格式,顯示用戶名和進程的起始時間。 x 顯示不帶控制終端的進程。 2021-8-9Page 17 2. kill 結束進程命令結束進程命令 命令格式:命令格式: kill 選項 信號 常用選項:常用選項: s 指定需要送出的信號。既可以是信號名也可以對應數(shù)字。指定需要送出的信號。既可以是信

10、號名也可以對應數(shù)字。 p 指定指定kill命令只是顯示進程的命令只是顯示進程的PID,并不真正送出結束信號。,并不真正送出結束信號。 l 打印可以用打印可以用kill送的信號名表,可以在送的信號名表,可以在/usr/include/linux/signal.h文件文件 中找到。中找到。 2021-8-9Page 18 3. who命令查看當前在線上的用戶情況命令查看當前在線上的用戶情況 命令格式:命令格式: who imqsuwHT -count -idle -heading -help -message -mesg -version -writable file am i 不使用任何選項時,

11、不使用任何選項時,who命令將顯示以下三項內容:命令將顯示以下三項內容: login name:登錄用戶名; terminal line:使用終端設備; login time:登錄到系統(tǒng)的時間。 常用選項:常用選項: -m顯示運行該程序的用戶名。 -q只顯示用戶的登錄帳號和登錄用戶的數(shù)量,該選項優(yōu)先級 高于其他任何選項。 -i 在登錄時間后面顯示該用戶最后一次對系統(tǒng)進行操作至今 的。 -H 顯示一行列標題。 2021-8-9Page 19 4. top命令顯示系統(tǒng)當前的進程和其他狀況命令顯示系統(tǒng)當前的進程和其他狀況 top命令和ps命令的基本作用是相同的,但是top是一 個動態(tài)顯示過程,即可以

12、通過用戶按鍵來不斷刷新當前狀態(tài)。 命令格式:命令格式: top - d delay q c s S 常用選項:常用選項: d 指定每兩次屏幕信息刷新之間的時間間隔。 q 該選項將使top沒有任何延遲的進行刷新。 S 指定累計模式。 s 使top命令在安全模式中運行。 i 使top不顯示任何閑置或者僵死進程。 c 顯示整個命令行而不只是顯示命令名。 2021-8-9Page 20 5. w命令顯示登錄到系統(tǒng)的用戶情況命令顯示登錄到系統(tǒng)的用戶情況 w命令也用于顯示登錄到系統(tǒng)的用戶情況,但是與 who不同的是,w命令功能更加強大,它不但可以顯示有誰登錄到系 統(tǒng),還可以顯示出這些用戶當前正在進行的工作

13、,并且統(tǒng)計數(shù)據(jù)相 對who命令來說更加詳細和科學,可以認為w命令就是who命令的一 個增強版。 命令格式:命令格式: w -husfV user 下面對參數(shù)進行說明:下面對參數(shù)進行說明: -h 不顯示標題。 -u 當列出當前進程和CPU時間時忽略用戶名。 -s 使用短模式。不顯示登錄時間、JCPU和PCPU時間。 -f 切換顯示FROM項,也就是遠程主機名項。默認值是不顯 示遠程主機名。 -V 顯示版本信息。 -User 只顯示指定用戶的相關情況。 2021-8-9Page 21 Linux進程控制包括創(chuàng)建進程、執(zhí)行進程控制包括創(chuàng)建進程、執(zhí)行 新程序、退出進程以及改變進程優(yōu)先級等。新程序、退出

14、進程以及改變進程優(yōu)先級等。 2021-8-9Page 22 2021-8-9Page 23 創(chuàng)建進程創(chuàng)建進程 1.fork()函數(shù) 2.Vfork()函數(shù) 7.4.17.4.1創(chuàng)建進程創(chuàng)建進程 1.fork()函數(shù)函數(shù) # include # include pid_t fork(void); 功能功能:系統(tǒng)調用fork()是創(chuàng)建一個新進程的方法 返回值返回值:fork()函數(shù)有兩個返回值,即調用一次返回兩次。 一個是父進程調用fork()函數(shù)后的返回值,該返回值是剛剛創(chuàng)建的子進程 的ID; 另一個是子進程中fork()函數(shù)的返回值0。fork()函數(shù)返回兩次的前提是進 程創(chuàng)建成功; 如果進程

15、創(chuàng)建失敗,則返回-1。 2021-8-9Page 24 注意:fork函數(shù)返回子進程的pid 7.4.17.4.1創(chuàng)建進程創(chuàng)建進程 注意點:注意點:fork()fork()函數(shù)調用一次返回兩次的理解函數(shù)調用一次返回兩次的理解 例題:demo2.c (1)fork函數(shù)的源代碼功能組成函數(shù)的源代碼功能組成 為子進程分配內存空間; 將父進程空間的全部內容復制到子 進程內存空間; 在內核PCB區(qū)域創(chuàng)建并初始化子進 程的PCB (其中包括pid,EIP=善后代碼的第 1行指令地址) 最后fork中還包含一段善后代碼。 (2)fork創(chuàng)建的子進程執(zhí)行的第一行代碼在創(chuàng)建的子進程執(zhí)行的第一行代碼在fork函數(shù)

16、內部(分函數(shù)內部(分 叉點在叉點在fork函數(shù)內部的善后代碼第一行),所以調用一次函數(shù)內部的善后代碼第一行),所以調用一次fork 將出現(xiàn)兩次的返回,且將出現(xiàn)兩次的返回,且都是返回各自子進程的都是返回各自子進程的PID。 7.4.17.4.1創(chuàng)建進程創(chuàng)建進程 注意點:當把注意點:當把forkfork調用語句視為原子級時,可調用語句視為原子級時,可 以認為父、子進程的執(zhí)行分叉點就是以認為父、子進程的執(zhí)行分叉點就是forkfork調調 用語句用語句 父、子進程分別從fork函數(shù)返回后,接 著分別執(zhí)行fork調用語句的下一條語句。 Page 26例題:demo2.c 7.4.17.4.1創(chuàng)建進程創(chuàng)建

17、進程 注意點:在注意點:在forkfork內部分叉后,父、子進程哪個先內部分叉后,父、子進程哪個先 執(zhí)行是不確定的,取決于執(zhí)行是不確定的,取決于OSOS進程調度策略進程調度策略。 為了使程序在執(zhí)行fork后續(xù)代碼時,子進 程先相應,可以在父進程執(zhí)行的代碼中使用 sleep(秒數(shù))和wait()。 Page 27例題:demo2.c 7.4.17.4.1創(chuàng)建進程創(chuàng)建進程 2.Vfork()函數(shù)函數(shù) #include #include pid_t vfork(void); 功能: vfork()函數(shù)的調用方法與fork()函數(shù)完 全相同,也是用來創(chuàng)建一個新進程。 返回值:返回值:正確返回:在父進程

18、中返回子進程的進 程號,在子進程中返回0;錯誤返回:-1。 Page 28 7.4.17.4.1創(chuàng)建進程創(chuàng)建進程 3 3、forkfork對文件描述符的影響對文件描述符的影響 (1 1)文件描述符的本質)文件描述符的本質 文件描述符文件描述符 2021-8-9Page 29 在每個進程中有且只在每個進程中有且只 有一張屬于自己的文有一張屬于自己的文 件描述符表。文件描件描述符表。文件描 述符表可視為指針數(shù)述符表可視為指針數(shù) 組,數(shù)組的指針元素組,數(shù)組的指針元素 指向文件表的一個元指向文件表的一個元 素,數(shù)組的小標就是素,數(shù)組的小標就是 文件描述符。文件描述符。 文件表整個系統(tǒng)只有文件表整個系統(tǒng)

19、只有 一張一張(系統(tǒng)級系統(tǒng)級) i i結點表整個系統(tǒng)只有結點表整個系統(tǒng)只有 一張一張( (系統(tǒng)級系統(tǒng)級) ),一個,一個 元素對應一個物理文元素對應一個物理文 件件 7.4.17.4.1創(chuàng)建進程創(chuàng)建進程 3 3、forkfork對文件描述符的影響對文件描述符的影響 (2)fork(2)fork對文件描述符的影響對文件描述符的影響 Page 30 例題:demo3.c fork執(zhí)行會導致子進程繼承父進程打開的文件描述符。執(zhí)行會導致子進程繼承父進程打開的文件描述符。 子進程將父進程的整個文件描述符表復制一份,且 open函數(shù)在fork函數(shù)之前調用,從而父子進程擁有相同的 文件表元素。這將導致父(子

20、)進程讀取文件后,子 (父)進程將讀取同一文件的后續(xù)內容。 7.4.17.4.1創(chuàng)建進程創(chuàng)建進程 3 3、forkfork對文件描述符的影響對文件描述符的影響 子進程將父進程的整個文件描述符表復制一份,且open 函數(shù)在fork函數(shù)之后調用,從而父子進程擁有各自的文 件表元素。這將導致父、子進程讀取文件操作是獨立的, 互不影響。 例題:demo4.c 7.4.17.4.1創(chuàng)建進程創(chuàng)建進程 4 4、waitwait函數(shù)函數(shù) (1)使用)使用wait的原因的原因 fork克隆出子進程后,克隆出子進程后,為了使子進程先于父進程為了使子進程先于父進程 運行運行。在系統(tǒng)負荷不重時,可以在父進程中使用。在

21、系統(tǒng)負荷不重時,可以在父進程中使用 sleep( )的方式讓父進程進入休眠來實現(xiàn)。的方式讓父進程進入休眠來實現(xiàn)。 如果系統(tǒng)負荷重的情況下,使用如果系統(tǒng)負荷重的情況下,使用sleep( ),有可能,有可能 時間已過,系統(tǒng)還是沒有調度到子進程。時間已過,系統(tǒng)還是沒有調度到子進程。 wait函數(shù)用于使父進程阻塞,直到一個子進程結函數(shù)用于使父進程阻塞,直到一個子進程結 束或者該進程接收到一個指定信號為止才繼續(xù)執(zhí)行束或者該進程接收到一個指定信號為止才繼續(xù)執(zhí)行 父進程。這樣可以父進程。這樣可以100%保證父、子進程按照程序員保證父、子進程按照程序員 的預先安排來執(zhí)行程序。的預先安排來執(zhí)行程序。 例題:de

22、mo2.c (2 2)waitwait函數(shù)函數(shù) #include #include pid_t wait(int *status); 功能:功能:等待進程結束(使父進程阻塞,直到一個子進程 結束或者該進程接收到一個指定信號為止才繼續(xù)執(zhí)行父 進程) 返回值:返回值:成功,返回子進程ID號;出錯,返回-1 參數(shù):參數(shù): 參數(shù)名參數(shù)名說明說明注意注意 status存放進程結束狀態(tài)傳址 注意:通過傳址status可以達到一個函數(shù)執(zhí)行后返回兩個或多個值的效果。 (2 2)waitwait函數(shù)函數(shù) 與與wait函數(shù)聯(lián)合使用的多個宏函數(shù)說明函數(shù)聯(lián)合使用的多個宏函數(shù)說明 函數(shù)函數(shù)說明說明 WIFEXITED(

23、status)用于判斷子進程的返回狀態(tài)是否正常,正常 返回真,否則為假。 WEXITSTATUS(status)讀取子進程正常退出的狀態(tài)值。 WIFSIGNALED(status)用于判斷子進程的退出狀態(tài)是否非正常,非 正常退出返回真,否則為假。 WTERMSIG(status)用來返回非正常退出狀態(tài)的信號number 例題:demo5.c 7.4.17.4.1創(chuàng)建進程創(chuàng)建進程 5 5、waitpidwaitpid函數(shù)函數(shù) #include #include pid_t waitpid(pid_t pid, int *status, int options); 功能:功能:等待進程結束 返回值

24、:返回值:成功,返回子進程ID號;出錯,返回-1 參數(shù):參數(shù): 參數(shù)名參數(shù)名說明說明注意注意 pid要等到的子進程ID-1表示等待任意一個子進程 status存放進程結束狀態(tài)傳址 options等待方式0表示不設置等待方式 例題:使用waitpid修改demo5.c為demo6.c 7.4.27.4.2在子進程中執(zhí)行新程序在子進程中執(zhí)行新程序 1 1、execexec函數(shù)函數(shù) #include int execle(const char *path, const char *arg0, ., char * const envp); 功能:功能:在用fork函數(shù)創(chuàng)建子進程后,子進程往往要調 用一

25、個exec函數(shù)以執(zhí)行另一個程序。 原理:原理:當進程調用一種exec函數(shù)時,該進程完全由 新程序代換,而新程序則從其main函數(shù)開始執(zhí)行。 因為調用exec并不創(chuàng)建新進程,所以前后的進程ID 并未改變。exec只是用另一個新程序替換了當前進程 的正文、數(shù)據(jù)、堆和棧段。 7.4.27.4.2在子進程中執(zhí)行新程序在子進程中執(zhí)行新程序 1 1、execexec函數(shù)函數(shù) 返回值:返回值:執(zhí)行失敗返回-1 參數(shù):參數(shù): 參數(shù)名參數(shù)名說明說明注意注意 pathname要執(zhí)行二進制程 序文件路徑 arg0執(zhí)行二進制程序 的第一個參數(shù) arg0為二進制程序名; 可以有arg1、arg2、. . . ; 要以“

26、(char *)0”或“NULL” 結束arg參數(shù) envp環(huán)境變量 例題:demo7.c 7.4.27.4.2在子進程中執(zhí)行新程序在子進程中執(zhí)行新程序 2 2、execexec函數(shù)的函數(shù)的6 6種形態(tài)種形態(tài) int execl(const char * pathname, const char * arg0, . , (char *) 0); int execv(const char * pathname, char *const argv ); int execlp(const char * filename, const char * arg0, ., (char *) 0 ); int

27、 execvp(const char * filename, char *const argv ); int execle(const char * pathname, const char * arg0, ., (char *)0, char *const envp ); int execve(const char * pathname char *const argv , char *const envp ); L(List) 列表參數(shù),最后要有一個NULL V(Vector) 數(shù)組為命令參數(shù) E(Environment) 可以傳遞環(huán)境變量 P(Path) 在PATH環(huán)境變量中查找程序的二

28、進制文件 注意:對于沒有指定環(huán)境變量的,子進程將繼承父進程的環(huán)境變量 7.4.27.4.2在子進程中執(zhí)行新程序在子進程中執(zhí)行新程序 3 3、execexec函數(shù)的函數(shù)的6 6種形態(tài)的系統(tǒng)處理關系種形態(tài)的系統(tǒng)處理關系 execvp execlpexecl execv execle 程序舉例:程序舉例: char *ps_argv=“ps”,”-ax”, NULL; char *ps_envp=“PATH=/bin:/usr/bin”,”TERM=console”, NULL execl(“/bin/ps”, “ps”, “-ax”, NULL); execv(“/bin/ps”, ps_argv

29、); execle(“/bin/ps”, “ps”, “-ax”, NULL, ps_envp); execve(“/bin/ps”, ps_argv, ps_envp); execlp(“ps”, “ps”, “-ax”, NULL); execvp(“ps”, ps_argv); 7.4.27.4.2在子進程中執(zhí)行新程序在子進程中執(zhí)行新程序 4 4、多進程中調試子進程、多進程中調試子進程 例題:demo9.c 在子進程最前面加入printf(child process pid:%dn,getpid(); 而后加入sleep(60) gcc g 編譯程序 gdb 調試程序 在fork處設斷點

30、,使用r運行,s調試fork得到子進程pid 在另一個終端使用sudo gdb 程序 子進程pid l命令查看程序,在子進程中設斷點 使用n或s調試程序,等到子進程的sleep執(zhí)行完,繼續(xù)調試 7.4.37.4.3進程的消忙進程的消忙 用戶函數(shù) 主函數(shù)main Start-up routine Exit 函數(shù)標準IO庫緩存刷新 內核 exec -exit -exit -exit -exit exit exit exit call return call call return return 用戶程序空間 內核緩存 (大小固定) 標準IO函數(shù) 系統(tǒng)調用IO函數(shù) 系統(tǒng)調用IO函數(shù) 系統(tǒng)調用IO函數(shù)

31、 Exit Handler call return C語言的執(zhí)行程序是通過內核調用exec啟動; 在main函數(shù)運行之前,內核先啟動用戶程序中默認的例程 Start-up routine。該例程為main的執(zhí)行準備環(huán)境(包括argc、 argv參數(shù)),已經(jīng)調用main函數(shù)。 7.4.37.4.3進程的消忙進程的消忙 1 1、啟動例程與、啟動例程與mainmain函數(shù)函數(shù) Page 43 (1)區(qū)別)區(qū)別 exit函數(shù)在返回內核之前會執(zhí)行一些清理操作。 _exit函數(shù)立即返回內核,不做清理工作。 (2)exit函數(shù)所做的清理工作函數(shù)所做的清理工作 調用Exit handle 關閉標準的I/O流(刷新buffer中的數(shù)據(jù),即將 buffer中的數(shù)據(jù)提交到內核,完成輸入或輸出) 參照圖解 7.4.37.4.3進程的消忙進程的消忙 2 2、exitexit函數(shù)與函數(shù)與_exit_exit函數(shù)函數(shù) Page 44 7.4.37.4.3進程的消忙進程的消忙 用戶函數(shù) 主函數(shù)main Start-up routine Exit 函數(shù)標準IO庫緩存刷新 內核 exec -exit -exit -exit -exit exit exit exit call return call call retur

溫馨提示

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

評論

0/150

提交評論