fork()'ing 示例
fork()'ing example
我在理解以下代码时遇到一些问题。如果我 运行 程序带有 单个参数(argc of 2), for fork() 运行 两次并创建 2 个子进程。所以总进程应该是3,对吧?但是我的教授说他们应该是 4。我不明白为什么。
如果其中一个子进程创建了另一个 fork(),为什么不创建第二个?当我们使用 两个参数 的程序时会发生什么?有人可以逐步解释吗?
#include <unistd.h>
int main(int argc, char *argv[])
{
int c;
for (c = 0; c < argc; c++) {
(void) fork();
}
return 0;
}
Could someone explain step-wise?
第 1 步:进程 1 在 c = 0
时调用 fork()
。进程 2 创建为当前状态的副本。
步骤 2:进程 1 在 c = 1
时调用 fork()
。进程 3 创建为当前状态的副本。
步骤 3:进程 2 在 c = 1
时调用 fork()
。进程 4 创建为当前状态的副本。
第 4 步: 进程 3 从 c = 1
开始,因此 for
循环在递增到 c = 2
后终止,没有进一步的进程已创建。
步骤 5: 进程 4 从 c = 1
开始,因此 for
循环在递增到 c = 2
后终止,没有进一步的进程已创建。
进程总数:4。
我在理解以下代码时遇到一些问题。如果我 运行 程序带有 单个参数(argc of 2), for fork() 运行 两次并创建 2 个子进程。所以总进程应该是3,对吧?但是我的教授说他们应该是 4。我不明白为什么。
如果其中一个子进程创建了另一个 fork(),为什么不创建第二个?当我们使用 两个参数 的程序时会发生什么?有人可以逐步解释吗?
#include <unistd.h>
int main(int argc, char *argv[])
{
int c;
for (c = 0; c < argc; c++) {
(void) fork();
}
return 0;
}
Could someone explain step-wise?
第 1 步:进程 1 在 c = 0
时调用 fork()
。进程 2 创建为当前状态的副本。
步骤 2:进程 1 在 c = 1
时调用 fork()
。进程 3 创建为当前状态的副本。
步骤 3:进程 2 在 c = 1
时调用 fork()
。进程 4 创建为当前状态的副本。
第 4 步: 进程 3 从 c = 1
开始,因此 for
循环在递增到 c = 2
后终止,没有进一步的进程已创建。
步骤 5: 进程 4 从 c = 1
开始,因此 for
循环在递增到 c = 2
后终止,没有进一步的进程已创建。
进程总数:4。