linux學習 fork用法

2021-06-20 05:47:36 字數 776 閱讀 3661

linux當中可以使用fork函式建立乙個新程序

#include

pid_t fork(void);

返回值:子程序中返回0,父程序中返回子程序id,出錯返回-1

在fork呼叫之後,子程序和父程序繼續執行fork呼叫之後的指令。子程序獲得父程序資料空間、堆和棧的副本,但是並不共享這些儲存空間部分。

fork的乙個特性是父程序的所有開啟檔案描述符都被複製到子程序中。父、子程序的每個相同的開啟描述符共享乙個檔案表項。

這種共享檔案的方式使父、子程序對同一檔案使用了乙個檔案偏移量。

這裡需要注意一下,父、子程序是共享正文段的,但是fork之後,子程序獲取到的pc(程式計數器)已經指向了fork之後的內容,所以,子程序只執行fork之後的**。

fork有兩種用法:

(1)乙個父程序希望複製自己,使父、子程序同時執行不同的**段。例如,父程序等待客戶端的服務請求,然後fork乙個子程序處理這個請求,自己則繼續等待下乙個服務請求。

(2)乙個程序要執行乙個不同的操作。fork乙個子程序之後立馬呼叫exec

fork的特殊應用:fork兩次可以避免僵死程序,(僵死程序是指乙個已經終止,但是其父程序尚未對其進行善後處理的程序),父程序先fork乙個子程序,子程序繼續fork乙個孫子程序,然後就直接退出。這樣,父程序就可以很快的wait到子程序,釋放其資源,不需要阻塞,繼續自己的操作;而孫子程序交由了init程序託管,執行自己的操作而不用擔心了。

ps:write函式不帶緩衝,標準i/o庫是帶緩衝的,如果標準輸出練到終端裝置,則它是行緩衝的,否則它是全緩衝的

Linux學習之 fork函式

nfork函式建立乙個新程序,新程序被稱為子程序 n函式原型 pid t fork void n返回值 fork函式呼叫一次,但是返回兩次 在子程序中返回0,在父程序中返回子程序id,出 錯返回 1。通過返回值,可以確定是在父程序還是子程序中。n子程序和父程序繼續執行fork呼叫之後的指令。子程序是...

Linux學習之「fork函式」

n返回值 fork函式呼叫一次,但是返回兩次 在子程序中返回0,在父程序中返回子程序id,出錯返回 1。通過返回值,可以確定是在父程序還是子程序中。n子程序和父程序繼續執行fork呼叫之後的指令。子程序是父程序的副本 1.子程序獲得父程序資料空間 堆和棧的副本 父子程序並不共享這些儲存空間。2.父子...

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

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