我在理解以下代码时遇到了一些麻烦。如果我使用单个参数(argc为2)运行程序,则for fork()运行两次,并创建2个子进程。因此,总流程应为 3 ,对吗?但是我的教授说他们应该是 4 。我不明白为什么。
如果子进程中的一个创建另一个fork(),为什么不创建第二个fork()?当我们使用两个参数的程序时会发生什么?有人可以逐步解释吗?
#include <unistd.h>
int main(int argc, char *argv[])
{
int c;
for (c = 0; c < argc; c++) {
(void) fork();
}
return 0;
}
答案 0 :(得分:0)
有人可以逐步解释吗?
步骤1::进程1在fork()
时调用c = 0
。进程2被创建为当前状态的副本。
步骤2::进程1在fork()
时调用c = 1
。进程3被创建为当前状态的副本。
步骤3::过程2在fork()
时调用c = 1
。进程4被创建为当前状态的副本。
步骤4:进程3从c = 1
开始,因此for
循环在递增到c = 2
后终止,不再创建任何进程。
步骤5:进程4从c = 1
开始,因此for
循环在递增到c = 2
后终止,不再创建任何进程。
进程总数:4。