我看資料說vfork會保證子程序先調子程序,並且子程序呼叫exit或者exec後父程序才可能被呼叫,那我既不呼叫exit又不呼叫exec,我用return會怎麼樣,或者我什麼也不呼叫又會出現什麼情況呢?
我的**是這樣的:
#include #include int g_val=0;
int main()
else if(id ==0)
else
return 0;
}
1. 其中子程序使用exit的時候的結果如下:
[admin@localhost vfork]$ ./vfork
child val:0 g_val:0
father val:1 g_val:2
[admin@localhost vfork]$
2. 子程序中使用return的時候:
[admin@localhost vfork]$ ./vfork
child val:0 g_val:0
father val:7790715 g_val:2
child val:0 g_val:2
father val:7790715 g_val:4
child val:0 g_val:4
father val:7790715 g_val:6
child val:0 g_val:6
father val:7790715 g_val:8
child val:0 g_val:8
father val:7790715 g_val:10
child val:0 g_val:10
father val:7790715 g_val:12
child val:0 g_val:12
father val:7790715 g_val:14
^c[admin@localhost vfork]$
3.子程序中既不呼叫exit也不呼叫return的時候:
[admin@localhost vfork]$ ./vfork
child val:0 g_val:0
father val:7790715 g_val:2
child val:0 g_val:2
father val:7790715 g_val:4
child val:0 g_val:4
father val:7790715 g_val:6
child val:0 g_val:6
father val:7790715 g_val:8
child val:0 g_val:8
father val:7790715 g_val:10
^c[admin@localhost vfork]$
呼叫exit和預想的結果一樣,父程序的空間被修改。但是呼叫return則有些不解。
剛剛開始的時候我也覺得不可思議,不是說了子程序沒有呼叫exit或者exec父程序不會被呼叫嗎?怎麼父程序還是被呼叫了,而且他們怎麼還成了死迴圈了呢?或者說我什麼既不呼叫return又不呼叫exit怎麼也成了死迴圈了。
結合網上的資料,我自己也想了一下,return 的時候程式的棧空間會釋放,清理資源。而且是子程序呼叫的return啊,子程序還先呼叫啊,過河拆橋?這真是「坑爹」啊,父程序執行的棧都被破壞了,還怎麼執行啊。至於什麼都不呼叫我想和這個差不多吧,子程序實在父程序空間上執行的,子程序執行結束後會自動清理資源,和return一樣。
現在想想這個確實不是什麼很難的問題,但是就當是寫給自己和那些還沒弄懂的人看吧,萬一哪天我忘記了,還可以回頭來再看看
我是看了這位大神的
vfork死迴圈問題
關於vfork函式的乙個問題。include include include include int main else return 0 首先說一下fork和vfork的差別 這兩個的差別是,乙個是copy,乙個是share。你 man vfork 一下,你可以看到,vfork是這樣的工作的,1 ...
無限迴圈ScrollView
實現無限迴圈scrollview效果,對於一些人來說,確實有點頭痛。最近我也碰到了這類問題,在網上查了好多資料,也煩了好久。雖然網上有詳解,不過講解的過於簡單 有demo,但功能也沒有達到我的需求。因此,我在前人的基礎上,自己寫了乙個demo,拿出與大家分享,希望能幫到大家。在設定滑動區域大小時,只...
無限迴圈指令
keywords 無限迴圈 死迴圈 無限迴圈 死迴圈 指令 適用於intel指令集 eb fe 跳轉到當前位置 舉例 00401824 eb fe jmp short 00401824opcode instruction description eb cb jmp rel8 jump short,r...