一、程序與進程的區別
1、程序是靜態概念,本身作為一種軟件資源長期保存;而進程是程序的執行過程,它是動態概 念,有一定的生命期,是動態產生和消亡的。
2、程序和進程無一一對應關系。一個程序可以由多個進程共用;另一方面,一個進程在活動中有 可順序地執行若干個程序。
二、父進程【PPID】與子進程【PID】
1、子進程是由一個進程所產生的進程,產生這個 子進程的進程稱為父進程。
2、在Linux系統中,使用系統調用fork創建進程。 fork復制的內容包括父進程的數據和堆棧段以及父進程的進程環境。
3、父進程終止子進程自然終止。
4、兩種特殊情況
(1)父進程終止,子進程依然存在,子進程變成孤兒進程,其自動PPID指向init
(2)子進程死亡,父進程不知到,子進程變成僵屍進程
三、前台進程與後台進程
前台進程:
在Shell提示處敲入命令後,創建一個子進程【父進程是Shell】,運行命令,Shell等待命令退出,然後返回到對用戶給出提示符。這條命令與Shell異步運行,即在前台運行,用戶在 它完成之前不能執行另一個命令。
後台進程:
在Shell提示處敲入命令,若後隨一個&,Shell創建的子 進程運行此命令,但不用等待命令退出,而直接返回到對用戶給出提示。這條命令與Shell同步運行,即在後台運 行。後台進程必須是非交互式的。
如:find /home -name init > test/tmp.txt
四、進程狀態
就緒狀態:進程已經分配到資源,但因為 其它進程正占用 CPU,所以暫時不 能運行而等待分配 CPU的狀態。
等待狀態:因等待某種 事件而暫時不能運 行的狀態。
運行狀態:進程分配到 CPU,正在處理器 上運行。
五、進程狀態細化
用戶態運行:在CPU上執行用戶代碼
核心態運行:在CPU上執行核心代碼
在內存就緒:具備運行條件,只等調度程序為它分配CPU
在內存睡眠:因等待某一事件的發生,而在內存中排隊等待
在外存就緒:就緒進程被交換到外存上繼續處於就緒狀態
在外存睡眠:睡眠進程被交換到外存上繼續等待
在內存暫停:因調用stop程序而進入跟蹤暫停狀態,等待其父進程發送命令。
在外存暫停:處於跟蹤暫停態的進程被交換到外存上
創建態:新進程正在被創建、但尚未完畢的中間狀態
終止態:進程終止自己