程序可以看做程式的一次執行過程,在linux下每個程序有唯一的pid來標識程序。
特殊程序:linux用程序表來儲存正在執行的程序id為0的是排程程序,該程序是核心的一部分,不執行任何磁碟上的程式
id為1的是init程序,init通常讀取與系統有關的初始化檔案(/etc/rc*檔案、/etc/inittab檔案、/etc/init.d/中的檔案)
id為2的是頁守護程序,負責支援虛擬儲存器系統的分頁操作
命令ps aux可以檢視所有正在執行的程式
ps -ef | grep 搜尋內容可以查詢想要的程序
程序在linux中呈樹狀結構,init為根節點,其它程序均有父程序,某程序的父程序就是啟動這個程序的程序,這個程序叫做父程序的子程序。
fork的作用是複製乙個與當前程序一樣的程序。新程序的所有資料(變數、環境變數、程式計數器等)數值都和原程序一致,但是是乙個全新的程序,並作為原程序的子程序。
#include
pid_t fork
(void);
//子程序返回0
//父程序返回子程序id
//出錯返回-1
fork函式被呼叫一次將返回兩次,在子程序中返回0,在父程序中返回子程序的id。
子程序獲得父程序的資料空間、堆、棧副本
init是永遠不會死亡的。看下面的linux父子程序終止的先後順序不同產生不同的結果:
1)父程序先於子程序終止:
此種情況就是孤兒程序。當父程序先退出時,系統會讓init程序接管子程序 。這也是讓程式進行後台執行的一種方式,系統apidaemon其實也是呼叫了這一過程
2)子程序先於父程序終止,而父程序又沒有呼叫wait或waitpid函式
此種情況子程序進入殭屍狀態,且會一直保持下去直到系統重啟。子程序處於殭屍狀態時,核心只儲存程序的一些必要資訊以備父程序所需。此時子程序始終占有著資源,同時也減少了系統可以建立的最大程序數。
殭屍程序:乙個已經終止、但是其父程序尚未對其進行善後處理(獲取終止子程序的有關資訊,釋放它仍占有的資源)的程序被稱為殭屍程序(zombie)。ps命令將殭屍程序的狀態列印為z 。
3)子程序先於父程序終止,而父程序呼叫了wait或waitpid函式
此時父程序會等待子程序結束。
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.父子...
程序管理之fork函式
include include pid t fork void fork函式在父程序中返回子程序的pid,在子程序中返回0。注意在子程序中返回的0,並不是子程序的pid,子程序的pid在父程序的返回值中儲存。而子程序的返回值是為了標識它是子程序,用來區分父子程序的。那麼為什麼這樣設計父子程序的返回值...