【发布时间】:2017-07-06 19:39:34
【问题描述】:
我正在为操作系统考试而学习,现在我看到了 fork() 系统调用行为的代码。主要目标是绘制此代码生成的进程树。我做到了,但是我无法解释,因为当我运行此代码时,它会打印 6 次 glob 的值,其中两个不同,而所有其他都相等。为什么会这样?它不应该打印单个 glob 值(准确地说是变量 glob 的值 2) ?谢谢大家!
这是代码:
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;
}
【问题讨论】:
-
您是否尝试过使用铅笔在纸上跟踪执行并以这种方式跟踪值?
-
“
glob”只是一个元变量名,比如foo吗?它的选择不是很好,因为它会遮蔽 POSIX standard function,这可能会造成混淆。这不是您看到的问题,但令人困惑。
标签: c linux operating-system fork