殊途同归的fork()
為啥是殊途同歸呢,因?yàn)殡m然fork后成為了兩個(gè)進(jìn)程,但是仍然是父子關(guān)系,正所謂你大爺還是你大爺。
fork是有叉子的意思,在linux中就是先分配資源,再將原進(jìn)程復(fù)制到新進(jìn)程中,這樣新老進(jìn)程就是一樣的了(不完全是,之后會(huì)解釋
首先拿雷電將軍來(lái)做個(gè)例子,影算是巴爾的一個(gè)復(fù)制吧(原來(lái)我也不玩原神
pid_t fpid;//全程是forked procesjis ID 顯示進(jìn)程的ID號(hào) fpid=fork();//用fpid接收f(shuō)ork()的返回值 if(fpid<0)cout<<"ERROR 我跟雷軍一點(diǎn)關(guān)系都沒(méi)有"<<endl; else if(fpid==0)cout<<"我是影啊"<<endl; elsecout<<"我是原版雷軍"<<endl;結(jié)果可以看到輸出:
我是影啊
我是原版雷軍
為什么一個(gè)順序的判斷結(jié)構(gòu)會(huì)把兩個(gè)if中的內(nèi)容都執(zhí)行呢?
答案是在fork時(shí)已經(jīng)出現(xiàn)兩個(gè)進(jìn)程了,分別把代碼執(zhí)行一遍,最終輸出只能在同一個(gè)屏幕罷了
?至于fork()返回的值:
??1)在父進(jìn)程中,fork返回新創(chuàng)建子進(jìn)程的進(jìn)程ID;
??2)在子進(jìn)程中,fork返回0;
??3)如果出現(xiàn)錯(cuò)誤,fork返回一個(gè)負(fù)值;
總結(jié):爸爸遺傳給兒子,可以直呼兒子的名
? ? ? ? ? ?兒子沒(méi)孩子,只能是0
? ? ? ? ? ? 如果是負(fù)數(shù),說(shuō)明是個(gè)悲傷的故事,親子鑒定孩子不是親生的
?
總結(jié)
以上是生活随笔為你收集整理的殊途同归的fork()的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。