Linux多任務編程之五:exit()和_exit()函數

來源:互聯網
上載者:User

標籤:style   http   ar   color   使用   sp   for   strong   檔案   

來源:CSDN  王文松   轉自:Linux公社

------------------------------------------------------------------------------------------------------------------------------------------------

wait()和waitpid()

函數說明

wait()函數用於使父進程(也就是調用wait()的進程)阻塞,直到一個子進程結束或者該進程接收到了一個指定的訊號為止。如果該父進程沒有子進程或者它的子進程已經結束,則wait()函數就會立即返回。

waitpid()的作用和wait()一樣,但它並不一定要等待第一個終止的子進程(它 可以指定需要等待終止的子進程),它還有若干選項,如可提供一個非阻塞版本的 wait()功能,也能支援作業控制。實際上,wait()函數只是 waitpid()函數的一個特例,在Linux 內部實現 wait()函數時直接調用的就是waitpid()函數。

函數格式

為wait()函數的格式

為waitpid()函數的格式

 

基礎實驗

實驗1

本實驗中首先使用fork()建立一個子進程,然後讓其子進程暫停5s(使用了sleep()函數)。接下來對原有的父進程使用waitpid() 函數,並使用參數WNOHANG是該父進程不會阻塞。若有子進程退出,則waitpid()返回子進程號;若沒有子進程退出,則waitpid()返回 0,並且父進程每隔1s迴圈判斷一次。該程式的流程圖如下:

程式原始碼我上傳到網站,可以免費下載waitpid.c檔案,點此下載

下載檔案後,使用命令:gcc waitpid.c -o waitpid

然後執行命令:./waitpid 結果如;

從輸出結果就可以看出程式的執行流程。先執行一次父進程,父進程睡眠1s,此時執行子進程,然後子進程睡眠5秒;接著再執行父進程監聽。哎喲我去我不分析流程了,怕再說迷糊了。

實驗2

本實驗使用函數wait(),同實驗2一樣,也是先用fork()建立一個子進程,然後讓子進程暫停5s。接下來對原有的父進程使用wait()函數。不同的是,wait()函數會使得父進程阻塞,通過本實驗的結果就可以看出。代碼如下:

執行結果如

我建議你親自實驗一下,能很明顯的看出不同。

wait.c檔案下載

免費在 http://linux.linuxidc.com/

使用者名稱與密碼都是www.linuxidc.com

具體下載目錄在 /2013年資料/6月/12日/Linux多任務編程

Linux多任務編程之五:exit()和_exit()函數(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.