1. 程式人生 > >進程的相關概念

進程的相關概念

linux系統 進程

在操作系統系統裏,進程是一個非常重要的概念。

一、什麽是進程呢?

按我的理解,通俗的來說進程是運行起來的程序。唯一標示進程的是進程描述符(PID)。

那麽先來了解一下進程和程序的區別:

  1. 程序是靜態概念,本身作為一種軟件資源長期保存;而進程是程序的執行過程,它是動態概念,有一定的生命期,是動態產生和消亡的。

  2. 程序和進程無一一對應關系。一個程序可以由多個進程公用;另一一方面,一個進程在活動中有可順序地執行若幹個程序

二、進程的分類

1)根據在linux不同模式下運行分為:

核心態:這類進程運行在內核模式

用戶態:這類進程工作在用戶模式

2)按照進程的狀態可分為:

運行態:running, 正在運行的進程

可中斷睡眠態:進程處於睡眠狀態,但是可以被中斷

不可中斷的睡眠態:進程處於睡眠狀態,但是不可以被中斷

停止態:stoped 不會被內核調度

僵死態:zombie 產生的原因是進程結束後,它的父進程沒有wait它,所導致的。

3)按照操作的密集程度

CPU密集型:進程在運行時,占用CPU時間較多的進程。

I/O密集型:進程在運行時,占用I/O時間較多的進程。

通常情況下,I/O密集型的優先級要高於CPU密集型。


三、進程的優先級

進程的有優先級,是用0-139數字來表示的,數字優先級從小到大依次是:0-99,139-100。

優先級又分為2類:

實時優先級:0-99,是由內核維護的

靜態優先級:100-139,可以使用nice來調整,nice值的取值範圍是[-20,19),分別對應100到139。nice默認值是0。

nice值:-20~19:默認0

註意:只有管理員才能使用負整數的nice值,以提升進程的優先級,而普通用戶只能使用正整數的nice值,以降低進程的優先級


四、進程的創建和終止

除了init進程之外,剩下其他的各個進程都是由其父進程創建的; 由fork()系統調用來實現;

每個父進程通過fork()系統調用來復制自身的數據給子進程使用;這種復制方式不是理解復制,而是寫時復制(CoW);;

任何父進程創建的子進程都必須由父進程親自銷毀,任何進程的父子關系都保存在task struct中;


五、父子進程的關系
1.子進程是由一個進程所產生的進程,產生這個子進程的進程稱為父進程

2.在linux系統中,使用系統調用fork創建進程。fork復制的內容包括父進程的數據和堆棧段以及父進程的進程環境。
3.父進程終止子進程自然終止。

六、前臺進程和後臺進程
前臺進程:
在shell提示處理打入命令後,創建一個子進程,運行命令,Shell等待命令退出,然後返回到對用戶給出提示符。這條命令與Shell異步運行,即在前臺運行,用戶在它完成之前不能執行別一個命令

很簡單,我們在執行這個查找命令時,無法進行其它操作,這個查找就屬於前臺進程

後臺進程:

在Shell提示處打入命令,若後隨一個&,Shell創建子進程運行此命令,但不等待命令退出,而直接返回到對用戶給出提示。這條命令與Shell同步運行,即在後臺運行。"後臺進程必須是非交互式的" ;





進程的相關概念