对不起,似乎无法理解这一小块C中发生的事情:
#include <stdio.h>
main()
{
int i;
if (fork()) { /* must be the parent */
for (i=0; i<1000; i++)
printf("\t\t\tParent %d\n", i);
}
else { /* must be the child */
for (i=0; i<1000; i++)
printf("Child %d\n", i);
}
}
据我所知,它将打印1000次儿童和父母1000次,但显然它要复杂得多,我必须完全理解它!请有人能够向我解释一下吗?另外,我如何更改程序,使父和子执行不同的计算?
非常感谢你对此的帮助:)
答案 0 :(得分:4)
fork()创建一个新进程。所以从那时起,将会有两个独立的进程,它们都是从fork()所在的代码点继续进行的。在主进程中,fork()返回新子进程的PID,并在子进程中返回零。因此代码将在不同的进程中执行if语句的不同分支。
还请记住,新进程与线程不同。这些过程不会有任何全局变量或类似的共同点,但它们是完全分开的。但他们不一样。
答案 1 :(得分:1)
fork()
函数生成一个新进程,其中包含原始“父”进程的内存的精确副本。两个进程都从同一点继续执行,但fork()
为子进程返回0,对于父进程返回非零。所以父进程执行第一个循环,子进程执行第二个循环。
请注意,由于没有任何内容同步父级和子级,因此您在屏幕上显示的字符串顺序基本上是随机的。
答案 2 :(得分:1)
fork()
函数生成所谓的子进程。子进程是首先调用fork()
的进程的克隆。它甚至开始在父进程停止的同一个地方执行,这是在调用fork()
之后。
唯一的区别是fork()
将为父进程返回true
(或为零),为子进程返回false
(或非零)。这意味着父进程在调用fork()
之后将执行条件的第一部分。子进程将开始执行条件的第二部分。
每个人都会按照操作系统的计划打印1000次,每次打印都会在主要方法结束时终止。