1. 程式人生 > >一個迴圈裡fork出的子程序個數

一個迴圈裡fork出的子程序個數

[[email protected] fork]$ ./exe
pid:4071
------
問以下程式碼的執行結果

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

int main(){
  int pid=0;
  for(int i=0;i<3;i++){
    pid=fork();
    printf("pid:%d\n",pid);
    printf("------\n");
  }
}

結果如下,有點吃驚

pid:0
pid:4072
------
------
pid:4074
------
pid:4073
------
 pid:0
------
pid:0
------
pid:4077
------
pid:0
------
pid:0
------
pid:4078
------
pid:0
------
pid:4079
------
pid:0
------

原來,每次fork一個子程序後,它都分享父程序的記憶體區域,所以每個fork出的子程序會接著執行迴圈。

執行第一次的時候,fork出一個程序,第二次執行的時候,連同上次的子程序也會產生子程序,故而1變2,2變4,4變8......

迴圈執行n次後總共有2的n次方個程序,新程序數則為2的n次方減1.

由於每個程序都要執行一次printf語句,故printf總共執行的次數為2+4+8+16……本例的迴圈執行3次,printf了14次。

相關推薦

一個迴圈fork程序個數

[[email protected] fork]$ ./exe pid:4071 ------ 問以下程式碼的執行結果 #include <stdio.h> #include <sys/types.h> #include <unist

2.fork建立程序:vfork

getpid/getppid getpid 獲取當前程序id getppid 獲取當前程序的父程序的id fork pid_t fork() 1.為什麼fork有兩個返回值? 因為這兩個返回值是由不同的程序return出來的,而不是由一個fork函式返回兩個數。 (fork

fork之後程序到底複製了父程序什麼

原文地址:http://blog.csdn.net/xy010902100449/article/details/44851453 #include<stdio.h>   #include<string.h>   #include&l

n個數前m個數

引子每年十一月各大IT公司都不約而同、爭後恐後地到各大高校進行全國巡迴招聘。與此同時,網上也開始出現大量筆試面試題;網上流傳的題目往往都很精巧,既能讓考查基礎知識,又在平淡中隱含了廣闊的天地供優秀學生馳騁。 這兩天在網上淘到一1道筆試題目(注1),雖然真假未知,但的確是道好題

關於fork建立程序的一些疑惑

Python中執行 os.fork() 會建立 一個子程序,程序號為0 import os import time ret = os.fork() if ret == 0: while T

fork應用---程序呼叫execve

//open.c 檔案 1.父程序中開啟一個現有檔案123.c,fork出一個子程序 2.子程序中呼叫execve函式,新的程序替換子程序 #include <stdio.h> #

如何從一個父串中找串的個數

題目要求:輸入一個父字串,和一個子字串,編寫程式碼要求能夠實現計算出父串中子串的個數,例如:輸入父字串“hello”,輸入子字串“ll”,輸出結果為1。程式碼如下:#include <stdio.h> #include <string.h> void

valgrind跟蹤fork程序-debug除錯

valgrind --leak-check=full --trace-children=yes --undef-value-errors=no --track-fds=yes --num-callers=50 --lo

迴圈fork建立程序個數

linux下建立程序的系統呼叫是fork。其定義如下 #include <sys/types.h> #include <unistd.h> pid_t fork(); 在迴圈中建立程序時,程序的個數是怎樣的? 1、迴圈中沒有任何父子程序的判斷 #in

Linux程序分析(三) fork迴圈建立Linux程序

fork fork的意思是複製程序,就是把當前的程式再載入一次,載入後,所有的狀態和當前程序是一樣的(包括變數)。fork不象執行緒需提供一個函式做為入口, fork後,新程序的入口就在 fork的下一條語句。 返回值為pid_t,實際是unsigned i

程序fork()兩次---解決一個程序不必等待程序終止,也不希望程序處於僵死狀態(一般是伺服器程序fork())

首先,要了解什麼叫殭屍程序,什麼叫孤兒程序,以及伺服器程序執行所需要的一些條件。兩次fork()就是為了解決這些相關的問題而出現的一種程式設計方法。  孤兒程序         孤兒程序是指父程序在子程序結束之前死亡(return 或exit)。如下圖1所示:

UNIX網絡編程卷1 server程序設計範式1 並發server,為每一個客戶請求fork一個進程

忽略 target ldp lose child 系統 all int acc 本文為senlie原創。轉載請保留此地址:http://blog.csdn.net/zhengsenlie 1.傳統並發server調用 fork 派生一個子進程來處理每一個客

html、css和js原生寫一個模態彈框,順便解決父元素半透明元素不透明效果

script javascrip z-index htm index 彈出 rgb 特性 radi 模態框: html部分: <!-- 按鈕 --> <button id="box" onclick="pop_box()">彈出框</

一個簡單的python腳本來返回ip地址的掩碼,個數

pypi package 多少 ask pri 1.2 bfc pty rom 如果我們想快速得到一個IP地址段有多少個ip,快速得到IP地址段的子網掩碼,或者快速得到一個IP地址的二進制,那麽可以來學習一下。本文利用python的一個IP分析模塊IPy實現,首先安裝IPy

java中請給例子程序:找個數的最大公約數和最小公倍數

strong big ont com 約數 計算 www main .html 9.2 找出12和8的最大公約數和最小公倍數。 (視頻下載) (全部書籍) public class Test { public static void main(String[]

演算法:給定一個整數陣列和一個目標值,找陣列中和為目標值的兩個數、判斷一個整數是否是迴文數

<!-- 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9

fork -- 程序共享父程序開啟的檔案描述符

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #define FILE_PATH "file_point" int main(int a

給定一個字串,找不含有重複字元的最長子串的長度。 示例: 給定 "abcabcbb" ,沒有重複字元的最長子串是 "abc" ,那麼長度就是3。 給定 "bbbbb" ,最長的串就是 "b

Str = raw_input('plese input Str:') def qiu_chongfu(Str2):#定義判斷字串是否含有重複字元,如有返回0,沒有返回1 biao = 0 for i in range(0,len(Str2)): for j in

給定一個整數數組和一個目標值,找數組中和為目標值的兩個數

目標 for循環 答案 [] 遍歷 一個 class tar 利用 題目描述: 給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重復利用。示例:給定 nums = [2, 7, 11, 15], targ

Java演算法給定一個整數陣列,找其中兩個數相加等於目標值

給定一個整數陣列,找出其中兩個數相加等於目標值  例如:給定陣列及目標值 nums = [2,7,11,15] ,target = 9  因為nums[0] + nums[1] = 2 + 7 = 9  返回[0,1] /** * 使用輔助空間(使用雜湊表