C語言裡的多程序(用fork函式實現)

2021-08-11 13:14:12 字數 1139 閱讀 5882

建立程序有兩種方式,一是由作業系統建立;二是由父程序建立。作業系統建立的程序,它們之間是平等的,一般不存在資源繼承關係。而由父程序建立的程序(子程序),它們和父程序存在隸屬關係。子程序又可以建立程序,形成乙個程序家族。

系統呼叫fork是建立乙個新程序的唯一方法。程序呼叫fork函式就建立了乙個子程序。

建立了乙個子程序之後,父程序和子程序爭奪cpu,搶到cpu者執行,另外乙個掛起等待。若要父程序等待子程序執行完畢後再繼續執行,可以在fork操作之後呼叫wait或waitpid。

fork函式

#include #include pid_t fork(void);
fork()函式呼叫後有2個返回值,呼叫一次,返回兩次。成功呼叫fork函式後,當前程序實際上已經**為兩個程序,乙個是原來的父程序,另乙個是剛剛建立的子程序。fork()函式的2個返回值,乙個是父程序呼叫fork函式後的返回值,該返回值是剛剛建立的子程序的id;另乙個是子程序中fork函式的返回值,該返回值是0。這樣可以用返回值來區分父、子程序。

#include #include #include main()

//父子程序共同執行部分

while(k>0)

}

執行結果:

上例中子程序輸出3條訊息,父程序輸出5條訊息。執行子程序和父程序時列印出的訊息是不一樣的。從輸出可以看出父子程序交替進行。

注意:父子程序終止的先後順序不同會產生不同的結果。

(1)在子程序退出前父程序先退出,則系統會讓init程序接管子程序。

(2)當子程序先於父程序終止,而父程序又沒有呼叫wait函式等待子程序結束,子程序進入殭屍狀態,並且會一直保持下去除非系統重啟。子程序處於殭屍狀態時,核心只儲存該程序的一些必要資訊以備父程序所需。此時子程序始終占用著資源,同時也減少了系統可以建立的最大程序數。如果子程序先於父程序終止,且父程序呼叫了wait或waitpid函式,則父程序會等待子程序結束。

(3)在linux下,可以簡單地將sigchld訊號的操作設為sig_ign,這樣當子程序結束時就不會稱為殭屍程序。

程序的基本操作,fork(),建立多程序。

fork用於新建乙個子程序,簡單的例子 include 提供open函式 include 該標頭檔案提供系統呼叫的標誌 include 該標頭檔案提供系統狀態資訊和相關函式 include 該標頭檔案提供程序i o操作的相關函式 include 標準函式庫 include 檔案操作相關函式庫 inc...

C語言 fork函式

一 fork函式的使用 fork函式被宣告在unistd.h 標頭檔案中,包含 include 這個標頭檔案即可呼叫。int main else printf 統計結果是 d n count return 0 fork 之後的語句父程序和子程序都會執行,新主要用pid來區分,程序也會分配到新的記憶體...

linux多程序的總結(fork用法)

簡單理解為,乙個程序表示的,就是乙個可執行程式的一次執行過程中的乙個狀態。作業系統對程序的管理,典型的情況,是通過程序表完成的。程序表中的每乙個表項,記錄的是當前作業系統中乙個程序的情況。對於單 cpu的情況而言,每一特定時刻只有乙個程序占用 cpu,但是系統中可能同時存在多個活動的 等待執行或繼續...