1. 程式人生 > >迴圈中fork建立程序的個數

迴圈中fork建立程序的個數

linux下建立程序的系統呼叫是fork。其定義如下

#include <sys/types.h>
#include <unistd.h>

pid_t fork();

在迴圈中建立程序時,程序的個數是怎樣的?

1、迴圈中沒有任何父子程序的判斷

#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
    pid_t pid;
    int idx = -1;
    
    for (int i = 0; i < 2; i++) {
        pid = fork();
        
    }
    
   
    while (1);    
    exit(0) ;
}

輸出為

可以看出總共有4個程序

其生成過程圖如下所示

2、建立指定個數的子程序

在建立子程序後,根據fork的返回值判斷是否是子程序,如果是子程序,(1)退出迴圈,進入子程序的事件處理;(2)不退出迴圈,直接是子程序的事件處理,其中 事件處理是一個迴圈,所在迴圈退出前,子程序是不會執行for語句的,這也是nginx建立工作程序的方式

程式碼如下

int main()
{
    pid_t pid;
    int idx = -1;
    
    for (int i = 0; i < 2; i++) {
        pid = fork();
        if (pid < 0) {
            exit(-1);
        } else if (pid > 0) {
            continue;
        } else {
            idx = i;
            while (1) {
                printf("idx=%d\n", idx);
            }
        }
    }
    
   
    while (1);    
    exit(0) ;
}

輸出為

可以看到有3個程序,兩個子程序,一個父程序

其生成過程圖如下所示