fork可以用來建立乙個程序,當我們在乙個迴圈體中,就可以多次fork,建立多個程序,但是由於fork後是多程序一起執行,往往會出現令人意外的情況,請看下面的demo:
#include //標準的輸入輸出函式
#include //standard library標準庫函式標頭檔案
#include //對於類 unix 系統,unistd.h 中所定義的介面通常都是大量針對系統呼叫的封裝 fork、
int main()
}//返回大於0的程序就是父程序
if(pid>0) //父程序
else if(pid==0) //子程序
return 0; //養成好習慣,返回程式執行狀態碼
}
執行編譯後,執行輸出,./a.out,輸出結果如下:
總共有32個程序出來,原本是想建立五個子程序,為什麼呢?
原因在於在fork後,迴圈體for的邏輯在子程序也會執行,這樣就變成了子程序也會fork子程序,而再次迴圈子程序又會建立子程序,如果反覆五次,是呈現指數增加的,所以是2的5次方,32個程序。
這並不是我們想要的結果,所以需要避免子程序繼續fork
#include //標準的輸入輸出函式
#include //standard library標準庫函式標頭檔案
#include //對於類 unix 系統,unistd.h 中所定義的介面通常都是大量針對系統呼叫的封裝 fork、
int main()
//迴圈中,fork函式呼叫五次,子程序返回0,父程序返回子程序的pid,
//為了避免子程序也fork,需要判斷並break
if (pid==0)
}//返回大於0的程序就是父程序
if(pid>0) //父程序
else if(pid==0) //子程序
return 0; //養成好習慣,返回程式執行狀態碼
}
執行編譯後,執行輸出,./a.out,輸出結果如下:
以上是學習linux程式設計基礎一書的筆記。
C語言建立子程序
程式執行的時候,可以建立與自己關聯的子程序,建立了這個子程序之後,可以選擇等待這個子程序執行完畢,也可以讓子程序與自己並行執行,還可以終止自己轉而執行子程序。這些操作都是通過一系列相似而又有細微區別的庫函式來實現。下面對這些可以使用的庫函式進行介紹。它的函式定義如下 include int syst...
linux中建立多個子程序的方法
今天,師兄問我乙個問題說 小濤啊,建立兩個程序太簡單了,怎麼建立多個程序呢?我說那還不容易,看下邊 省略必要標頭檔案 int main if pid 0 0 printf this is parent d,child is d n getppid getpid else wait 5 return ...
linux中fork同時建立多個子程序的方法(二)
fork 同時建立多個子程序方法 第一種方法 驗證通過 特點 同時建立多個子程序,每個子程序可以執行不同的任務,程式 可讀性較好,便於分析,易擴充套件為多個子程序 int main void pid t p2 fork if p2 0 int st1,st2 waitpid p1,st1,0 wai...