進程的相關概念

在操做系統系統裏,進程是一個很是重要的概念。linux

1、什麼是進程呢?shell

按個人理解,通俗的來講進程是運行起來的程序。惟一標示進程的是進程描述符(PID)。異步

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

  1. 程序是靜態概念,自己做爲一種軟件資源長期保存;而進程是程序的執行過程,它是動態概念,有必定的生命期,是動態產生和消亡的。   spa

  2. 程序和進程無一一對應關係。一個程序能夠由多個進程公用;另外一一方面,一個進程在活動中有可順序地執行若干個程序操作系統

2、進程的分類進程

1)根據在linux不一樣模式下運行分爲:ci

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

    用戶態:這類進程工做在用戶模式同步

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

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

    可中斷睡眠態:進程處於睡眠狀態,可是能夠被中斷

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

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

    僵死態:zombie 產生的緣由是進程結束後,它的父進程沒有wait它,所致使的。

3)按照操做的密集程度

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

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

    一般狀況下,I/O密集型的優先級要高於CPU密集型。


3、進程的優先級

進程的有優先級,是用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值,以下降進程的優先級


4、進程的建立和終止

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

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

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


5、父子進程的關係
    1.子進程是由一個進程所產生的進程,產生這個子進程的進程稱爲父進程

   2.在linux系統中,使用系統調用fork建立進程。fork複製的內容包括父進程的數據和堆棧段以及父進程的進程環境。
   3.父進程終止子進程天然終止。
    
6、前臺進程和後臺進程    
前臺進程:
  在shell提示處理打入命令後,建立一個子進程,運行命令,Shell等待命令退出,而後返回到對用戶給出提示符。這條命令與Shell異步運行,即在前臺運行,用戶在它完成以前不能執行別一個命令

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

後臺進程:

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

相關文章
相關標籤/搜索