【发布时间】:2018-08-25 16:40:12
【问题描述】:
我正在复习操作系统考试,目前正在尝试理解这个过程问题:
int main()
{
int v=0;
if(fork())
{
v++;
if(!fork())
{
fork();
v--;
}
}
}
所以问题要求
绘制一棵树,反映上述程序运行时创建的进程的父子层次结构。
创建了多少个整数变量 v 的单独副本?讨论树中每个进程在程序结束时 v 的值是多少。
我遇到的主要问题是
if(fork())
代码中的一行。通过查看其他堆栈溢出,我意识到
if(fork()) = if(fork() != 0)
但我仍然难以理解第一个 if 语句是否创建了子进程?因为这是第二个 if 语句的唯一方法:
(!fork())
可以执行吗?
这是我目前对这个问题的理解的程度。 screenshot of attempt
希望图表清晰易读!我真的很感激任何提示或指示。
【问题讨论】:
-
注意:您可以将您的问题分解为两个完全独立的问题:(1) 调用
fork()是否会创建子进程? (2)if (some_function()) { ... }是否调用some_function()?
标签: c multithreading process operating-system