迴圈中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個程序,兩個子程序,一個父程序
其生成過程圖如下所示
