fork与vfork的区别
fork與vfork的區(qū)別
1.vfork保證子進程先運行,在它調用exec或exit之后父進程才可能被調度運行。如果在調用這兩個函數(shù)之前子進程依賴于父進程的進一步動作,則會導致死鎖。
2.fork要拷貝父進程的進程環(huán)境;而vfork則不需要完全拷貝父進程的進程環(huán)境,在子進程沒有調用exec和exit之前,子進程與父進程共享進程環(huán)境,相當于線程的概念,此時父進程阻塞等待。
為什么會有vfork呢?
因為以前的fork當它創(chuàng)建一個子進程時,將會創(chuàng)建一個新的地址空間,并且拷貝父進程的資源,然后將會有兩種行為:
1.執(zhí)行從父進程那里拷貝過來的代碼段
2.調用一個exec執(zhí)行一個新的代碼段
當進程調用exec函數(shù)時,一個新程序替換了當前進程的正文,數(shù)據(jù),堆和棧段。這樣,前面的拷貝工作就是白費力氣了,這種情況下,聰明的人就想出了vfork。vfork并不復制父進程的進程環(huán)境,子進程在父進程的地址空間中運行,所以子進程不能進行寫操作,并且在兒子“霸占”著老子的房子時候,要委屈老子一下了,讓他在外面歇著(阻塞),一旦兒子執(zhí)行了exec或者exit后,相當于兒子買了自己的房子了,這時候就相當于分家了。
因此,如果創(chuàng)建子進程是為了調用exec執(zhí)行一個新的程序的時候,就應該使用vfork
之后我會更新 fork 和 vfork 的具體用法。
總結
以上是生活随笔為你收集整理的fork与vfork的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java函数ao活动对象_Java程序设
- 下一篇: 二级考试java模拟考试_2017年计算