Linux多任务编程之五:exit()和_exit()函数(转)
來源: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多任務編程
轉載于:https://www.cnblogs.com/hztd/p/4128940.html
總結
以上是生活随笔為你收集整理的Linux多任务编程之五:exit()和_exit()函数(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雷观(七):靠谱的程序员,不是随便一个码
- 下一篇: C#尝试读取或写入受保护的内存。这通常指