以下fork()调用的输出是什么?
func(){
fork();
fork();
fork() && fork() || fork();
fork();
print("Saikacollection\n");
}
任何人都可以帮助我获得此代码的答案以及一些解释,因为我是OS的新手?我在SO上找到了关于fork()的几个问题,但是不知道多少。
答案 0 :(得分:16)
Saikacollection将打印40
次作为代码的输出。这可以解释如下: -
要了解输出,我们需要了解以下内容: -
parent process.
pid
(进程标识符)返回给父项0
返回给子进程。
考虑显示的图像: -
约定:流程的所有父母(来电者)都会写入left
并标有star
。
fork()
一开始,我们只有一个进程,因此fork()调用会创建一个子进程。考虑树的根为1级,我们可以在2级看到,我们有两个进程,父进程(左)和子进程(右)。
fork()
fork()再次创建4
这样的进程,标记为1,2,3,4。由于所有这四个进程将进一步通过类似的代码结构,我们可以说总数过程将是单个过程产生的4
次
fork()&&fork()||fork()
理解这句话涉及到,实现了在C中&& operator has more precedence than ||
first
加入的两个操作数中的&&
为wrong
,则我们don't check the second
。同样,first
的两个操作数中||
为true
,we don't check the second
操作数。&&fork()
,返回一个进程的pid,该进程终止,而该步骤的子进程为0。因此,它将执行{{1} } ||fork()
调用,进一步产生了一个过程如果我们对所有三个节点都做了同样的事情,我们就可以有||fork()
个进程。
5*4 = 20
最后一分叉()只是fork()
该步骤可用的流程数。
doubles
。答案 1 :(得分:1)
Saikacollection每次都会在新行中打印32次。
答案 2 :(得分:0)
如果你想让新进程更加独立,你可以看看exec- *函数系列(POSIX) - 所以你可以fork,然后立即替换fork进程(你可以这样做,因为新分叉过程由你控制);或者也可以看看popen()。