C fork() - 此代码创建的唯一进程数是多少?

时间:2018-03-04 23:01:17

标签: c process fork

在以下代码段中,创建了多少个唯一进程?

pid t pid;
pid = fork();
if (pid == 0) {
    fork();
}
fork();

似乎答案是6,基于我绘制的过程树。我的推理是对的吗?

process tree

3 个答案:

答案 0 :(得分:2)

你的推理是正确的。根据此代码创建了5个进程,总共包含6个进程,包括原始进程。

要验证,请在上面的代码后添加以下两行:

printf("pid: %d, parent: %d\n", getpid(), getppid());
sleep(1);

在我的机器上打印这个(添加了注释以匹配您的树的pid:

pid: 2638, parent: 2498      // 1
pid: 2639, parent: 2638      // 2
pid: 2640, parent: 2638      // 4
pid: 2641, parent: 2639      // 3
pid: 2642, parent: 2639      // 5
pid: 2643, parent: 2641      // 6

答案 1 :(得分:1)

pid t pid;
pid = fork();

流程1执行上述行,创建流程2.流程1和流程2都从fork()返回。过程1接收过程2的PID。过程2接收0。

if (pid == 0) {
    fork();

只有进程2执行此行,创建进程3.进程2和进程3都从中返回。

}
fork();

进程1,2和3都执行上面的行,分别创建进程4,5和6.

你问题中的图表是正确的,尽管我可能会在每一行中对孩子们进行一些不同的命令。

答案 2 :(得分:0)

是的,这是对的。如果你想确保为每个父子打印pid(使用getpid())并计算打印的唯一数字。