歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux多任務編程(五) wait()、waitpid()函數及其基礎實驗

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文件:http://download.csdn.net/detail/mybelief321/5555101

下載文件後,使用命令:gcc waitpid.c -o waitpid

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

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

實驗2

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

執行結果如下圖

我建議你親自實驗一下,能很明顯 的看出不同。wait.c文件下載:http://download.csdn.net/detail/mybelief321/5555285

Copyright © Linux教程網 All Rights Reserved