所以我必须找到使用 fork()
方法的代码的输出。我以为输出是 5 个“hello”,但实际上我得到了 8 个。这是为什么呢?这是代码:
#include "csapp.h"
void doit()
{
Fork();
Fork();
printf("hello\n");
return;
}
int main()
{
doit();
printf("hello\n");
exit(0);
}
最佳答案
这是您的代码正在执行的操作:
main->doit()->Fork()->Fork()->printf()->return->printf()->exit()
| |
| ----->printf()->return->printf()->exit()
|
----->Fork()->printf()->return->printf()->exit()
|
----->printf()->return->printf()->exit()
如您所见,总共调用了 8 次 printf()
。
如果您选择在 main
和 doit
函数中打印不同的字符串,您会更容易看到发生了什么。
在每个 printf()
调用上设置断点是解决此类问题的另一种有效策略。
关于c - 为什么这个 fork() 输出产生 8 而不是 5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727168/