fork() 语句中的进程数,包括程序

Amount of processes in fork() statements including program

我正在学习 linux 中的分叉和进程,并且有一个关于初始父进程的问题。这个初始父进程是否被视为程序?

例如我创建 2 个分叉的这段代码

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

int main(int argc, char **argv, char **envp)
{
    printf("%d *\n", getpid());
    fork();
    printf("%d *\n", getpid());
    fork();
    printf("%d *\n", getpid());
    sleep(20);
    return EXIT_SUCCESS;
}

据我所知,会有一个初始父进程(我相信是程序),然后会有创建子进程的初始 fork。

剩下 2 个进程。然后另一个 fork 为总共 5 个进程创建了 2 个子进程,包括初始父进程。

据此理解,子进程总数为 3(2^2-1),除初始父进程外创建的进程总数为 4。

我的想法正确吗?

此外,什么会导致分叉失败?

不完全是,每个 fork() 调用都会创建一个额外的进程。在此示例中,您总共有 4 个进程,包括父进程。

编辑: 我建议阅读手册以了解您学习和使用的方法,例如http://man7.org/linux/man-pages/man2/fork.2.html

你会在那里找到所有的解释,包括可能的失败原因。