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
你会在那里找到所有的解释,包括可能的失败原因。
我正在学习 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
你会在那里找到所有的解释,包括可能的失败原因。