在以下程序中将产生多少个进程

2024-05-14

int main()
{
fork();
fork() && fork() || fork();
fork();

printf("forked\n");
return 0;
}

当我们调用 fork 函数时,父进程会得到一个非零 pid孩子得0分作为回报 基于这个逻辑,在第二个陈述中,我们必须应用以下原则:短路(AFAIK).... 第一次调用后将有 2 个过程,

第二行之后,8 个进程,[父进程在 (叉() && 叉()),而第二个孩子也因为“叉()||叉()"]

最后是16(根据我的推理)

请告诉我这是否正确或涉及其他逻辑


计算(fork() && fork() || fork()),只要记住:

  • In (&&) 逻辑运算符:右侧仅当左侧为NON ZERO

  • In (||) 逻辑运算符:右侧仅当左侧为ZERO

根据运算符优先级,我们可以这样写:

(fork() && fork()) || fork()

还要记住叉子返回NON ZERO to the parent and ZERO to the child

为了简化说明,我们重命名:

fork() && fork()手术A

and the 最后一个分叉()操作 B,因此前面的行相当于:

(fork() && fork()) || fork() => A || B

第一行 (fork) :

---> 2 流程 (Father and Child1)

第二行:

  • 一次手术:

第一个叉子=>

父亲会给孩子=>父亲(Child2的PID) and 儿童2(零)Child1 将给出一个孩子 =>Child1(Child3的PID) and 儿童3(零)

We have 4个进程:父亲(Child2的PID)、Child2(ZERO)、Child1(Child3的PID)和Child3(ZERO)

The (&& fork()) 只会对返回非零的最后操作执行 =>Father and Child1

父亲将给一个孩子=>父亲(Child4的PID) and 儿童4(零)Child1 将给出一个孩子 =>Child1(Child5的PID) and 儿童5(零)

我们总结一下:

We have 6 工序 :

父亲(Child4 的 PID)、Child4(零)、Child1(Child5 的 PID)、Child5(零)、Child2(零)和 Child3(零)

  • B 操作:

仅对返回 ZERO => 的最后命令执行从操作返回零的过程,有关流程有:

儿童 4(零)、儿童 5(零)、儿童 2(零)和儿童 3(零)

当 fork 这 4 个进程时,我们以 4 个新进程结束 =>Total number of process after second line = 10

第三线: 这只是一个简单的叉子

=> 进程总数 = 20

为了证明这一点:使用这个(fork_quiz.c)

#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
        fork();
        fork() && fork() || fork();
        fork();

        sleep(10);

        return 0;
}

并编译它:

gcc -Wall fork_quiz.c -o fork_quiz

并像这样运行它:

toc@UnixServer:~$ ./fork_quiz & (sleep 1; ps -o "%P%p%c")
[1] 15455
 PPID   PID COMMAND
15046 15047 bash
15047 15455 fork_quiz
15047 15456 bash
15455 15457 fork_quiz
15455 15458 fork_quiz
15455 15459 fork_quiz
15455 15460 fork_quiz
15457 15462 fork_quiz
15457 15463 fork_quiz
15457 15464 fork_quiz
15458 15465 fork_quiz
15458 15466 fork_quiz
15459 15467 fork_quiz
15459 15468 fork_quiz
15465 15469 fork_quiz
15467 15470 fork_quiz
15463 15471 fork_quiz
15463 15472 fork_quiz
15462 15473 fork_quiz
15462 15474 fork_quiz
15473 15475 fork_quiz
15471 15476 fork_quiz
15456 15477 ps
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在以下程序中将产生多少个进程 的相关文章

随机推荐