天天看點

迅為i.MX6ULL終結者程序基礎-程序建立

程序指正在運作的程式,資源配置設定的最小機關,可以通過“ps ”或“top”等指令檢視正在運作的程序,線程是系統的最小排程機關,一個程序可以擁有多個線程,同一程序裡的線程可以共享此程序的同一資源。本章代碼在process/目錄下。

程序類型:

1.互動程序:由shell啟動,使用者和計算機進行問答的程序。

2.批處理程序:不與特定終端相關聯,将任務送出到等待隊列按順序執行的程序。

3.守護程序:背景運作的特殊程序,使用者不能和它進行會話。

程序的三種狀态:

迅為i.MX6ULL終結者程式基礎-程式建立

1.運作态,正在運作或在運作隊列中等待。

2.可中斷等待态,休眠, 在等待申請的資源有效或等待中斷,信号喚醒。

3.不可中斷等待态,休眠等待資源有效,不能被中斷或信号喚醒。

4.終止态,程序被停止或者被跟蹤狀态,收到SIGCONT信号時,又會恢複運作狀态。

5.僵屍态,程序因某種原因而中止運作,但程序描述符仍存在,不可被Kill。

如果想銷毀某一程序,可在終端輸入“ps -elf”檢視程序号,如圖 66.2:

迅為i.MX6ULL終結者程式基礎-程式建立

如果要銷毀qtcreator程序,使用“kill -9 3001”可以銷毀它,

迅為i.MX6ULL終結者程式基礎-程式建立

1程序建立

所有的程序都是由其他程序建立(除了pid為0号的idle程序),pid号為1的init程序是系統啟動後運作的第一個程序,是所有程序的父程序,init程序會初始化一部分系統服務,建立其他程序。

建立新程序的那個程序稱為父程序,新程序稱為子程序,父程序和子程序擁有相同的代碼段資料段,有各自獨立的位址空間。采用寫時拷貝技術,即建立的新程序不會立即把父程序的資源空間複制過來,隻有在修改時才會複制資源,另外父程序挂起的信号和檔案鎖不會被子程序繼承。

子程序結束後,它的父程序要回收它的資源,否則就會成為僵屍程序 。

如果父程序先結束,子程序會被init程序收養,稱為孤兒程序。

終端輸入“ps -el”檢視程序狀态,PID為程序号,PPID為此程序的父程序号,如圖 1.1,1505号程序的父程序為1366程序。

迅為i.MX6ULL終結者程式基礎-程式建立
迅為i.MX6ULL終結者程式基礎-程式建立

getpid():擷取程序PID,

迅為i.MX6ULL終結者程式基礎-程式建立

傳回值為PID号。

fork()

:系統調用,建立一個程序,

#include <unistd.h>

pid_t fork(void);

調用成功父程序傳回子程序号,子程序傳回0,失敗傳回-1。

如以下代碼:

for.c:

迅為i.MX6ULL終結者程式基礎-程式建立

列印結果:

迅為i.MX6ULL終結者程式基礎-程式建立

程式執行過程中第一次調用fork()程序2531建立子程序2532;第二次fork(),程序2531建立子程序2533,程序2532建立2534,建立過程如圖 1.3:

迅為i.MX6ULL終結者程式基礎-程式建立
迅為i.MX6ULL終結者程式基礎-程式建立

繼續閱讀