在操做系統系統裏,進程是一個很是重要的概念。linux
1、什麼是進程呢?shell
按個人理解,通俗的來講進程是運行起來的程序。惟一標示進程的是進程描述符(PID)。異步
那麼先來了解一下進程和程序的區別:ide
程序是靜態概念,自己做爲一種軟件資源長期保存;而進程是程序的執行過程,它是動態概念,有必定的生命期,是動態產生和消亡的。 spa
程序和進程無一一對應關係。一個程序能夠由多個進程公用;另外一一方面,一個進程在活動中有可順序地執行若干個程序操作系統
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同步運行,即在後臺運行。"後臺進程必須是非交互式的" ;