在以下代码段中,创建了多少个唯一进程?
pid t pid;
pid = fork();
if (pid == 0) {
fork();
}
fork();
似乎答案是6,基于我绘制的过程树。我的推理是对的吗?
答案 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())并计算打印的唯一数字。