【发布时间】:2019-10-07 08:08:40
【问题描述】:
运行以下程序时会创建多少个进程?我解决不了。如果您能提供帮助,我将不胜感激
int main()
{
int i;
for (i=fork(); i<2; i++ )
fork();
}
【问题讨论】:
-
Fork() function in C的可能重复
运行以下程序时会创建多少个进程?我解决不了。如果您能提供帮助,我将不胜感激
int main()
{
int i;
for (i=fork(); i<2; i++ )
fork();
}
【问题讨论】:
fork() 创建一个子进程,创建父进程的另一个实例。它将 0 返回给子节点,将子节点的 PID 返回给父节点。
在这种情况下,当 i = fork() 被执行时, 父进程将 i 分配为子进程的 PID,该 PID 很可能大于 1。父进程中的 for 循环即使运行一次也不会运行,因为 i 将失败。此时有两个进程P和C1(Child)
parent执行fork后,child得到一个0作为返回值,i = 0。这意味着条件i 成功。 Child 在循环体中执行 fork(),创建 C2。 C1 和 C2 中 i 的值都是 0。i 递增到 1。
C1和C2执行i ,这个条件成功。 Fork 由两者执行。 C3由C1产生,C4由C2产生。
i 的值增加到 2。i
总而言之,该程序中创建了 4 个子进程。您可以使用以下程序尝试此操作,您将看到 5 个 PID 被打印出来。
#include <stdio.h>
main()
{
int i = 0;
for (i = fork(); i < 2; i++)
fork();
printf("Hello World i %d\n", getpid());
}
【讨论】: