在这个程序中创建了多少个进程?

时间:2013-10-23 05:09:00

标签: c process operating-system posix

#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()系统调用感到困惑,有人可以帮我解释一下吗?

2 个答案:

答案 0 :(得分:1)

fork()做什么?

fork()是一个有趣的电话。您可以将其视为将程序状态克隆为两个完全相同的副本 - 它们之间的唯一区别将是fork()的返回值。执行fork()的流程会收到新​​流程的流程ID(pid),而新流程会收到0

考虑到这一点:

创建了多少个进程?

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

答案 1 :(得分:0)

  1. 在程序启动期间,系统创建1个进程(+1)
  2. i = 3,程序创建新流程(+1),父退出,子继续
  3. i = 2,程序创建新流程(+1),父退出,子继续
  4. i = 1,程序创建新流程(+1),父退出,子继续
  5. i = 0,程序退出
  6. 所以,完全 - 4个过程,3个由程序创建,1个由系统