關於vfork函式的乙個問題。在ubuntu上:首先說一下fork和vfork的差別:#include #include #include #include int main()
else
return 0;
}
這兩個的差別是,乙個是copy,乙個是share。
你 man vfork 一下,你可以看到,vfork是這樣的工作的,
1)保證子程序先執行。
2)當子程序呼叫exit()或exec()後,父程序往下執行。
問題來了,如果子程序沒有呼叫exit退出,而是return返回,那麼在有些系統,例如centos上會陷入乙個死迴圈當中,更有甚著,直接會報乙個段錯誤,如ubuntu上。這是為什麼呢?
在centos上:
木有配圖=_=|| 死迴圈!
仔細分析過後,原因如下:
父子程序共享位址空間,子程序從main函式返回後,背後又呼叫了exit(函式),如此父程序才會開始執行。
return之後,此位址空間被銷毀,main函式棧幀被清退,運氣好的話(看系統版本)還是有可能繼續執行的,運氣不好就是段錯誤了。
exit函式沒有清退棧幀,所以將return改為exit,父程序還可以繼續執行。
由此得出乙個結論:vfork用的不好會坑爹!
HashMap死迴圈問題追蹤
hashmap在設計之初並沒有考慮多執行緒併發的情況,多執行緒併發的情況下理論上應該使用concurrenthashmap,但是程式中經常會無意中在多併發的情況下使用了hashmap,如果是jdk1.8以下的版本,有可能會導致死迴圈,打滿cpu占用,下面基於jdk1.7原始碼分析下原因。我們從put...
shell 死迴圈if判斷 shell 死迴圈
例1 執行指令碼後會自動載入firefox瀏覽器,並開啟指定網頁。如果使用者關閉firefox,指令碼會再次自動重新開啟firefox。如需結束迴圈,中止t2.sh程序即可。注意不要同時執行兩個t1.sh指令碼,否則 若事先不知道指令碼名,也可以通過類似於 pstree grep firefox 的...
UseEffect 死迴圈問題記錄
問題 如下 export default props props.data const info,setinfo usestate useeffrct option 當props.data 的值中沒有 option 的時候,就死迴圈了,報錯如下 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接...