簡介
剛開始接觸到進程時候,進程,線程,程序總是搞不清他們什麼關係,最重要是進程和線程總是搞混。不喜歡網上的”官方解釋”,我試着用通俗的語言大致說一下。
程序是放在磁盤上的文件,當這個文件可以運行起來幹某件事時候,它就成了進程了,當然一個程序需要多個任務,就會生成幹這多個任務的進程。線程是進程的下一代,當一個進程需要同時幹某件事情時候,就需要有多個線程同時工作,來完成一個進程,比如說聽音樂時候,音樂播放器在放出來音樂時候,同時又需要播放歌詞,這時就需要兩個線程來共同完成”播放音樂”的任務
進程創建
進程(Process),官方解釋大概意思是將放在磁盤中的程序複製一個副本,放在內存裏,構成指令的集合。
創建進程
那麼什麼時候會開始一個進程呢?
當我們執行一個命令時候,通常會開啓一個進程,比如ping的時候,就會產生一個進程。
這裏使用pidof來查看運行着的進程編號。
進程屬性
我們看到了進程編號,進程肯定還有其他屬性,還包括進程名,開啓進程所使用的命令,進程優先級(下面詳解),進程所屬用戶,進程佔用CPU時間等,總之,有很多,當我們用到進程工具查看時候就知道了
進程類型
看了進程長什麼樣後,進程有什麼樣的類型呢,就像人還分爲黃種人,黑種人,白種人呢
按模式分
守護進程(daemon),類似守門神,不管有沒有人進門,他們都時時刻刻,兢兢業業的守在那裏,在系統引導過程中啓動(開機就運行的進程),和終端無關,就是說,不管你開沒開啓終端,都會運行的進程
前臺進程,跟終端相關,只有打開終端後,才運行的進程,稱之爲前臺進程,比如說打開終端後,ping一個機器,使用vi 編輯一個文件
按照進程狀態分
- 運行態:running
- 就緒態:ready(等待cpu分配時間段)
- 睡眠態:
- 可中斷:interruptable
- 不可中斷:uninterruptable
- 停止態:stopped,暫停於內存,沒有運行,但不會被調度,除非手動啓動
- 僵死態:zombie,結束進程,父進程結束前,子進程不關閉(進程的父進程死掉,而它沒有死就會出現僵死態)
按照操作密集程度分
- CPU密集型:進程在運行時,佔用CPU時間較多的進程。
- I/O密集型:進程在運行時,佔用I/O時間較多的進程。通常情況下,I/O密集型的優先級要高於CPU密集型。
進程優先級
進程處理時候,如果同時處理多個進程,就涉及到哪個進程首先使用硬件的問題,因爲進程是需要CPU分配時間片來進行資源調用,其優先級越高,分配時間片越多,這就是進程的優先級。
整個系統來說,進程的有優先級,是用0-139數字來表示的,數字優先級從小到大依次是:0-99,100-139。
在這140個數字中,優先級分爲2類:
- 實時優先級(realtime):0-99,是由內核維護的
- 靜態優先級(nice):100-139,可以使用nice命令來調整,nice值的取值範圍是[-20,19),分別對應100到139。nice默認值是0。
- PR(top):top命令中定義的優先級
還是來圖實在些
當然我們現在都是centos6以後的系統了
只是system優先級一行不一樣。
進程間通信
進程間通信(Inter Process Communication),分爲是否在同一個主機,如果在兩個主機就需要使用網絡了
同一個主機
- signal:信號,kill -l可以看到主機可用信號
- shm:共享內存,因爲可以多個進程使用同一內存空間
socket:文件socket
在一個終端創建一個socket文件 [root@CentOS7 ~]#nc -Ul ./haha 另一個終端進行監聽 [root@CentOS7 ~]#nc -U ./haha 這時候就可以進行通信了
不同主機
- rpc:remote procedure call遠程過程調用
- socket:ip和端口號
有什麼寫錯的,請多多指正^_^