我正在學習操作系統考試,現在我看到了fork()系統調用行爲的代碼。主要目標是繪製由此代碼製作的進程樹。我做到了,但是我做了無法解釋,因爲當我運行這個代碼時,它會打印6次glob的值,其中兩個不同,而其他所有值相等。爲什麼?它不應該打印一個glob的值(正確地說是變量glob的值2)?謝謝大家!fork系統調用行爲的一些解釋?
這是代碼:
int main(int argc,char* argv[]){
int glob=5;
int pid=0;
pid=fork();
glob--;
pid=fork();
glob--;
if (pid!=0) {
pid=fork();
glob--; }
printf("Value=%d\n",glob);
return 0;
}
您是否嘗試過在紙上使用鉛筆執行跟蹤執行,並跟蹤這些值? – Dai
「glob」只是一個元變量名稱,比如'foo'?它沒有很好的選擇,因爲它遮蔽了一個[POSIX標準函數](https://linux.die.net/man/3/glob),這可能會讓人困惑。這不是你看到的問題,但它很混亂。 – unwind