【发布时间】:2019-10-11 07:46:44
【问题描述】:
我正在学习 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;
}
据我所知,会有一个初始父进程(我相信它是程序),然后会有初始分叉创建一个子进程。
剩下 2 个进程。然后另一个分支再创建 2 个子进程,总共 5 个进程,包括初始父进程。
根据这种理解,子进程的总数将是 3(2^2-1),而在初始父进程之外创建的进程总数将是 4。
我的想法对吗?
另外,什么会导致分叉失败?
【问题讨论】:
-
您基本上是在说 2+2=5。首先你有 2 个(“这会留下 2 个进程”,其中包括上一段中的父进程),然后添加 2 个(“然后另一个叉子再创建 2 个子进程”),最后以某种方式得到 5 个(“对于总共 5 个进程,包括初始父进程")。
-
@SanderDeDycker 是的,因为我将程序与初始父进程分开处理,但初始父进程是程序。