程式設計師的術與道:術——程式設計基本功之程序管理

1。程序概述

檔案是程式未啟動時候的載體,而程序則是程式實際啟動後的載體。如果你一直好奇程式到底是什麼,那我可以很負責任的告訴你,程式沒有啟動的時候是一堆檔案,啟動後是作業系統中的一個或者多個程序。

如果你聽到併發或者並行,那麼你一定要了解程序,因為程序是併發或者並行的前提。

如果你好奇計算機上那麼多程式是怎麼執行的,那麼你也一定要了解程序。

程式是指令的集合,而程序則是程式執行的基本單元。程式執行起來成為程序,進而利用處理器資源、記憶體資源,進行各種I/O操作,從而完成特定任務。

程序,本質意義上說, 是作業系統的排程單位,可以看成是一種作業系統 “資源” 。

程序除了包含程式檔案中的指令資料以外,還在核心中有一個數據結構用以存放特定程序的相關屬性,以便核心更好地管理和排程程序,從而完成多程序協作的任務。

程式設計師的術與道:術——程式設計基本功之程序管理

一個程式可能建立多個程序,透過多個程序的互動完成任務。在linux下,多程序的建立通常是透過fork系統呼叫來實現。

一個程序,主要包含三個元素:

一個可以執行的程式

和該程序相關聯的全部資料(包括變數,記憶體空間,緩衝區等等)

程式執行的上下文(呼叫堆疊)

程式可以由多種不同程式語言描述,包括C語言程式、組合語言程式和最後編譯產生的機器指令。

2。程序的基本概念

每一個程序都有一個非負整形表示的唯一程序ID。雖然程序ID總是唯一的,但是可以重用。當一個程序終止,其之前被分配的程序ID就可以再次被使用。

每一個程序都會有狀態,程序的狀態主要有以下幾種:

運行當一個程序獲得了除CPU以外的一切所需資源,一旦得到CPU即可執行,則稱此程序處於就緒狀態。就緒程序可以按多個優先順序來劃分佇列。例如,當一個程序由於時間片用完而進入就緒狀態時,排入低優先順序佇列;當程序由I/O操作完成而進入就緒狀態時,排入高優先順序隊

就緒當一個程序在CPU上執行時,則稱該程序處於執行狀態。處於此狀態的程序的數目小於等於處理器的數目,對於單CPU系統,處於執行狀態的程序只有一個。在沒有其他程序可以執行時(如所有程序都在阻塞狀態),通常會自動執行系統的空閒程序

阻塞也稱為等待或睡眠狀態,一個程序正在等待某一事件發生(例如請求I/O而等待I/O完成等)而暫時停止執行,這時即使把處理機分配給程序也無法執行,故稱該程序處於阻塞狀態。

程序的基本操作包括:

新建

休眠

停止

3。C語言程序基本操作

c語言程序相關操作在unistd。h中定義,使用時需包含該標頭檔案。

程式設計師的術與道:術——程式設計基本功之程序管理

fork函式是用於建立一個子程序,該子程序幾乎是父程序的副本。

程式設計師的術與道:術——程式設計基本功之程序管理

如果要子程序去執行另外的程式,需要使用exec函式族。通常exec會放在fork() 函式的子程序部分, 來替代子程序執行啦, 執行成功後-子 程式就會消失, 但是執行失敗的話, 必須用exit()函式來讓子程序退出

exec函式族就提供了一個在程序中啟動另一個程式執行的方法。它可以根據指定的檔名或目錄名找到可執行檔案,並用它來取代原呼叫程序的資料段、程式碼段和堆疊段,在執行完之後,原呼叫程序的內容除了程序號外,其他全部被新程式的內容替換了。

exec函式族包含:

execl()

程式設計師的術與道:術——程式設計基本功之程序管理

execlp()

程式設計師的術與道:術——程式設計基本功之程序管理

execle()

程式設計師的術與道:術——程式設計基本功之程序管理

execv()

程式設計師的術與道:術——程式設計基本功之程序管理

execvp()

程式設計師的術與道:術——程式設計基本功之程序管理

execvpe()

程式設計師的術與道:術——程式設計基本功之程序管理

exec函式族 裝入並執行程式pathname, 並將引數arg0(arg1,arg2,argv[],envp[])傳遞給子程式, 出錯返回-1。 在exec函式族中, 字尾l, v, p, e新增到exec後, 所指定的函式將具有某種操作能力有後綴:

l: 接受一個以逗號為分割的引數列表, 列表以NULL指標為結束標誌。

v: 接受一個以NULL結尾的字串陣列的指標作為引數。

p: 表示該次呼叫執行的程式名, 可以使用PATH環境變數指示的路徑, 也就是不用寫明程式的完整路徑。

e: 制定環境, 如果無e時, 則表示使用當前程式的環境。

程序休眠

程式設計師的術與道:術——程式設計基本功之程序管理

C語言程序停止

先找到程序號,然後用kill命令殺死

程式設計師的術與道:術——程式設計基本功之程序管理

3。python程序基本操作

python fork建立子程序(linux)

python中的os模組封裝了常見的系統呼叫,其中包含fork,透過fork可以輕鬆的建立子程序。

程式設計師的術與道:術——程式設計基本功之程序管理

程式設計師的術與道:術——程式設計基本功之程序管理

透過process建立

Process代表一個程序物件

建立子程序時,只需要在建構函式內傳入目標函式以及引數,呼叫start方法即可

join()方法是讓主程序等待子程序結束後再執行後續程式碼

程式設計師的術與道:術——程式設計基本功之程序管理