1. 簡介:
在作業系統中執行一項指令、或執行一個程式,其過程在記憶體中進行,且被稱為「程序(process)」。也可將程序理解為「作業系統所要進行的一次工作、或任務」。重點說明如下:
(1) 一個程序有其「執行者」,也就是指令或程式的執行者,可能是系統帳號、或一般使用者、或root。一旦當指令或程式被執行,系統就會自動將此次執行定義為一個程序,執行完畢後,程序就消失了。
(2) 每個程序都有其識別碼,稱為PID(process ID),每個程序的PID都是獨一無二的,不會與其他程序相同。程序剛被定義時,就會被賦予一個PID,也會被賦予一個UID(通常等於執行者的UID),以及一個GID(通常等於執行者之有效群組的GID)。
※ 註:系統中的程序都有一些相關的紀錄檔或設定檔,這些檔案被存放在/proc目錄之中。此目錄之下有些子目錄是以數字來命名,這些數字就是PID,而這些目錄中的資訊,就是該PID之程序的相關資訊。
(3) 很多時候,一個程序在執行時,會需要利用到外部檔案中的資料。這時,系統會去檢查此程序的UID和GID,看是否符合該外部檔案的權限,若符合就允許程序去存取此外部檔案,否則就不允許。
(4) 很多時候,一個程序在執行時會將其工作分類,並產生另一個程序去執行某部分工作,然後將結果回傳,再繼續原本的工作。例如程序A在進行時產生了程序B,我們就把A稱為B的「父程序」、把B稱為A的「子程序」。子程序的PID當然和父程序不同,不過通常,其UID和GID和父程序相同,因此子程序的權限和父程序也是相同的。
※ 一個子程序的「PPID(parent PID)」,就是其父程序的PID。
※ 父程序產生子程序分為兩個步驟,第一個步驟叫「fork」,第二個步驟叫「exec」:
fork:父程序自我複製出一個新程序,這個新程序的PID和原程序PID不同,其PPID和原程序PID相同,而欲執行的內容一模一樣。
exec:這新程序的欲執行內容被重新載入,與原程序欲執行的內容不同。此新程序就正式成為子程序。
(5) 有些程序是自開機後,就一直不斷的執行(可能是每隔一小段時間就會自動執行),這種程序通常是以系統帳號的身分去執行,被稱為「常駐系統程序(daemon)」。
(6) shell(如bash)本身也是一個程序(也有PID)。而在shell下執行的程序也都算是此shell的子程序。
留言列表