迴圈中fork建立程序的個數
阿新 • • 發佈:2019-02-07
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個程序,兩個子程序,一個父程序
其生成過程圖如下所示