我正在学习操作系统考试,现在我看到了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