父子進程
那麼我們首先來先說說父進程和子進程之間的區別:
- 父進程設置了鎖,子進程不繼承
- 進程ID不同
- 子進程的未決告警被清除
- 子進程的未決信號集設置為空集
fork系統調用說明
通過man手冊我們可以輕鬆知道fork()包含的頭文件
通過程序判斷父進程創建的子進程的值為0
fork()系統調用注意點:
通過以上程序我們可以知道:1)fork系統調用之後,父進程和子進程交替執行,並且它們處於不同空間中。
2)fork()函數的一次調用返回2次返回,這個有點抽象難理解,此時二個進程處於獨立的空間,它們各自執行者自己的東西,不產生衝突,所以返回2次一次pid ==0,一次pid大於0.而至於是先子進程還是父進程先執行,這沒有確切的規定,是隨機的.
3)將fork()返回值大於零設置為父進程,這是因為子進程獲得父進程的pid相對容易,而父進程獲子進程pid叫難,所以在在fork()系統調用中將子進程的pid字節有它自己返回給父進程.
4)forl()的子執行過程在fork()之後並不是從頭開始,因為在fork()之前,父進程已經為子進程搭建好了運行環境了.所以字節有效代碼處開始.理解了上面四點,相信我們應該對此係統調用一定有較深的瞭解.
vfork()系統調用:
那麼講完了fork(),我們不妨和vfork()比較,並且學習終結一下vfork(.);vfork()在某些情況下,我們知道vfork()與fork()執行結果是一樣的,除了子進程會執行一次exec系統調用或者調用_exit(0)退出.函數原型:pid_t vfork vfork(void),具體返回值與其中fork()類似. 這個函數時是在沒有實現寫時賦值前提下,所以現在我們並不推薦使用vfork().
- 結論如下 1)vfork() 子進程與父進程共享數據段
2)vfork() 中是子進程先執行,父進程後執行.
通常我們都是與exec函數在一起,在主進程中替換進程印象.
機器學習視頻下載:關注發私信(機器學習)可獲取下載鏈接
閱讀更多 互聯網奇點 的文章