unix中fork()的进程总数是多少?

时间:2017-02-24 12:02:32

标签: unix operating-system fork

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main() {
        pid_t pid; 
        pid = fork(); // #1
        if (pid == 0) {
                if(fork() > 0) // #2
                        fork(); // #3
        } else
                fork(); // #4
        return 0;
}

我真的对#4感到困惑,因为我不知道程序是否会运行这个else语句。 你们知道最后的进程总数是多少吗?

在这里,还有另一个程序。那么,那么进程的总数是多少呢?谢谢!

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main() { 
        for ( int i = 0; i < 10; i++)
                if (fork()) {
                        fork();
                        fork();
                 } else
                        fork();
        return 0;
}

1 个答案:

答案 0 :(得分:0)

您应该在fork(2)手册页中找到所需内容,特别是

  

成功时,子进程的PID在父进程中返回,          在孩子身上返回0。

fork调用时,我们有一个进程在进行调用,但有两个进程返回:父进程和(新)子进程。他们将 执行 fork 之后的所有代码。 该过程将根据返回值知道它是孩子还是父母(并且可以区分其行动)。

知道在C中,所有非零值都是真的,可以知道在else情况下是否以及谁执行#4:它将是孩子,实际上是生成一个大孩子。

这听起来像是家庭作业,所以我会把数字留给你。

有多个答案,取决于我们正在考虑fork是否失败的可能性(返回代码-1)。使用给定的代码,我假设您可以忽略它。