1. 程式人生 > 其它 >linu學習筆記-父程序與子程序的關係(通俗理解)

linu學習筆記-父程序與子程序的關係(通俗理解)

父程序和子程序

子程序是父程序的複製品

Unix/linux系統中的程序建立是這樣的,理解起來有點繞。

父程序先執行fork()系統呼叫,這個呼叫的結果是系統中多出了一個跟父程序內容完全一樣的程序,這個新程序被稱為子程序,當然該程序的PCB中父程序指標是指向第一個程序的。

前後兩個程序各自有自己的地址空間,形式上有點像把一個檔案拷貝了一個副本。雖然資源也相互獨立,但拷貝時父程序執行過程已生成的資料,子程序也拷了一份。說簡單點像一個執行到半路的程式突然在系統中多出了一個孿生兄弟,什麼都跟自己一樣,但要管自己叫老爸。

當然這樣的簡單複製本身是沒什麼用處的。要讓它發揮作用,還需要再執行 exec(B )系統呼叫,這個呼叫可以讓當前程序轉而執行另一個可執行程式碼(一個新的程式)。簡單的說程序本來在執行A程式,一旦執行到這個呼叫,就轉而開始執行B程式。

至此,父子兩程序就變的不一樣了,但不管它們各自執行的什麼程式碼,其父子關係不會改變,在父程序中可以使用子程序的程序ID(在執行fork()時的返回值中得到)來中止子程序的執行。當然子程序也可以因為自己的執行程式結束而終止執行

 

 

父程序和子程序先後執行的問題,是這樣的,在fork之後,是父程序先執行,然後一個時間片到達之後就是子程序再執行了。

 

每一個子程序都有一個父程序,當程序終止或者結束的時候,都會給父程序傳送一個SIGCHLD訊號,系統預設是父程序忽略這個訊號,如果父程序希望被告知其子程序的這種狀態改變,則應該捕獲這個訊號,捕捉函式一般是wait函式來取得子程序ID和子程序狀態。

 

對於鍵盤上的Ctrl+按鍵的操作,一般是產生一個訊號,然後程序捕捉這個訊號。另外當然我們可以直接使用這些訊號,通過kill命令,把訊號發給相應的其他程序。

 

wait函式是父程序等待子程序結束,也就是說當子程序結束的時候會發送給父程序一個訊號SIGCHID,這時候父程序通過wait函式接收到這個訊號,這時候父程序就知道子程序結束了。這個正好用在shell解析器的編寫裡面,shell解析器作為父程序,而命令列命令作為子程序,當子程序結束的時候就會告訴父程序,這時候父程序就可以提示輸入下一個命令了。

 

一個程序只能為他自己或者他的子程序設定程序組ID,在他的子程序呼叫了exec函式之後,就不能再改變該子程序的程序組ID了。

 

 

Linux程序管理對於電腦使用的玩家的常用軟體,然後我就學習及深入的研究Linux程序管理,在這裡和大家一起探討Linux程序管理的使用方法,希望對大家有用。程式是為了完成某種任務而設計的軟體,比如OpenOffice是程式。

  什麼是程序呢?程序就是執行中的程式。一個執行著的程式,可能有多個程序。比如LinuxSir.Org 所用的WWW伺服器是apache伺服器,當管理員啟動服務後,可能會有好多人來訪問,也就是說許多使用者來同時請求httpd服務,apache伺服器將會建立有多個httpd程序來對其進行服務。