標籤: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()函數(轉)