1.進程即正在執行的一個過程。進程是對正在運行程序的一個抽象。 2.正在進行的一個過程或者說一個任務,每一個進程在內存中使用的數據彼此是物理級別的隔離 3.進程的概念起源於操做系統,是操做系統最核心的概念,也是操做系統提供的最古老也是最重要的抽象概念之一。操做系統的其餘全部內容都是圍繞進程的概念展開的。
進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操做系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。linux
狹義定義:進程是正在運行的程序的實例(an instance of a computer program that is being executed)。nginx
廣義定義:進程是一個具備必定獨立功能的程序關於某個數據集合的一次運行活動。它是操做系統動態執行的基本單元,在傳統的操做系統中,進程既是基本的分配單元,也是基本的執行單元。web
程序是指令和數據的有序集合,其自己沒有任何運行的含義,是一個靜態的概念。而進程是程序在處理機上的一次執行過程,它是一個動態的概念shell
程序是指令和數據的有序集合,其自己沒有任何運行的含義,是一個靜態的概念。而進程是程序在處理機上的一次執行過程,它是一個動態的概念windows
注意:同一個程序執行兩次,就會在操做系統中出現兩個進程,因此咱們能夠同時運行一個軟件,分別作不一樣的事情也不會混亂。併發
但凡是硬件,都須要有操做系統去管理,只要有操做系統,就有進程的概念,就須要有建立進程的方式,一些操做系統只爲一個應用程序設計,好比微波爐中的控制器,一旦啓動微波爐,全部的進程都已經存在。異步
而對於通用系統(跑不少應用程序),須要有系統運行過程當中建立或撤銷進程的能力,主要分爲4中形式建立新的進程操作系統
不管哪種,新進程的建立都是由一個已經存在的進程執行了一個用於建立進程的系統調用而建立的:線程
1. 在UNIX中該系統調用是:fork,fork會建立一個與父進程如出一轍的副本,兩者有相同的存儲映像、一樣的環境字符串和一樣的打開文件(在shell解釋器進程中,執行一個命令就會建立一個子進程)
2. 在windows中該系統調用是:CreateProcess,CreateProcess既處理進程的建立,也負責把正確的程序裝入新進程。設計
進程執行時的間斷性,決定了進程可能具備多種狀態。事實上,運行中的進程可能具備如下三種基本狀態。
就緒狀態(Ready):
進程已得到除處理器外的所需資源,等待分配處理器資源;只要分配了處理器進程就可執行。就緒進程能夠按多個優先級來劃分隊列。例如,當一個進程因爲時間片用完而進入就緒狀態時,排入低優先級隊列;當進程由I/O操做完成而進入就緒狀態時,排入高優先級隊列。
運行狀態(Running):
進程佔用處理器資源;處於此狀態的進程的數目小於等於處理器的數目。在沒有其餘進程能夠執行時(如全部進程都在阻塞狀態),一般會自動執行系統的空閒進程。
阻塞狀態(Blocked):
因爲進程等待某種條件(如I/O操做或進程同步),在條件知足以前沒法繼續執行。該事件發生前即便把處理器資源分配給該進程,也沒法運行。
# 儘可能減小阻塞狀態能夠提高咱們程序運行的效率
多個不一樣的進程能夠包含相同的程序:一個程序在不一樣的數據集裏就構成不一樣的進程,能獲得不一樣的結果;可是執行過程當中,程序不能發生改變。