c - Linux C 编码中的 Fork() 命令

标签 c linux process fork child-process

我很难理解使用 fork() 命令最终会产生多少个进程。如果我从变量 pid_t pid; 开始并调用 fork() 我将有一个子进程和一个父进程。

现在,如果我在第一个 fork() 之后立即调用 fork 会怎样。我知道有 3 个还是 4 个进程吗?就像这个 fork 是对父级和子级都调用的,还是只对子级调用?那么子进程是否 fork() 另一个子进程因此创建了 3 个进程?或者在父进程和子进程上都调用了 fork,所以现在父进程将有一个子进程,该子进程也有自己的子进程,并且父进程现在有第二个子进程?

如果第三次再次调用 fork,所有 3 或 4 个进程都会获得子进程吗?只有最新的 child 吗?

根据 fork() 的工作方式,调用 fork() 3 次时会创建多少个进程?我陷入了 4,6 或 8 之间。

Here is the Linux C coding. How many processes will run when this program iis executed, including itself. Every process must terminate using the return(0)

最佳答案

当调用fork()时,该过程会重复,父进程和子进程都继续执行程序中的所有代码。如果您希望它们采取不同的行为,则需要检查返回值 - 它在子级中返回 0,在父级中返回子级的 PID。如果您没有任何以此为条件的代码,它们都会以相同的方式执行所有操作。因此,如果它再次调用 fork(),父进程和子进程都会发生这种情况,最终会得到 4 个进程:原始父进程、两个子进程和一个孙进程。第三个 fork() 产生 8 个进程。

关于c - Linux C 编码中的 Fork() 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348717/

相关文章:

c# - Microsoft .net,值得吗?

linux - 如何检测是否从另一个 shell 脚本调用了 shell 脚本

c++ - 如何使用 execv 生成后台程序

windows - 在 Windows 中,如何找出哪个进程位于本地网络套接字的另一端?

c - 交换结构

c - 排序三个数字的更简单方法

c - c 中的文本文件(int、string、string 和 float)的 fscanf 和 fgets

linux - 找不到 Bash 中的数组

linux - 更新所有目录中的 shell 脚本更改

c - 进程组中的进程是否应该在 Unix/Linux 中与其父进程一起终止?