1
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main ()
{
    int i = 3;
    int pid;
    while(i > 0) {
        pid = fork();
        if(pid > 0) {
            exit(0);
        } else {
            i--;
        }
    }
}

在那个程序上创建了多少进程???我仍然对 fork() 系统调用感到困惑,有人可以帮我解释一下吗?

4

2 回答 2

1

做什么fork()

fork()是一个有趣的电话。您可以将其视为将程序的状态克隆为两个完全相同的副本——它们之间的唯一区别是fork(). 执行的进程fork()接收新进程的进程 id (pid),而新进程接收0.

考虑到这一点:

创建了多少进程?

每次 fork 时,都会创建一个新进程并退出父进程。因此,您这样做了三次——通过分叉创建了三个进程。当然,这不包括您通过启动该过程开始的那个。:)

于 2013-10-23T05:14:21.617 回答
0
  1. 在程序启动期间,系统创建 1 个进程 (+1)
  2. i=3,程序创建新进程(+1),父进程退出,子进程继续
  3. i=2,程序创建新进程(+1),父进程退出,子进程继续
  4. i=1,程序创建新进程(+1),父进程退出,子进程继续
  5. i=0,程序退出

所以,总共 - 4 个进程,3 个由程序创建,1 个由系统创建

于 2013-10-23T05:13:10.957 回答