『學了就忘』Linux系統管理 — 81、進程管理介紹

1、進程與執行緒的概念

來源百度百科:

  • 進程(Process) 是電腦中的程式關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是作業系統結構的基礎。 在當代面向執行緒設計的電腦結構中,進程是執行緒的容器。程式是指令、數據及其組織形式的描述,進程是程式的實體。是電腦中的程式關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是作業系統結構的基礎。程式是指令、數據及其組織形式的描述,進程是程式的實體。
  • 執行緒(thread) 是作業系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條執行緒指的是進程中一個單一順序的控制流,一個進程中可以並發多個執行緒,每條執行緒並行執行不同的任務。

2、什麼是進程管理

  • 到底什麼是進程呢?
    進程是正在執行的一個程式或命令,每一個進程都是一個運行的實體,都有自己的地址空間,並佔用一定的系統資源。
  • 那麼什麼是程式呢?
    程式是人使用電腦語言編寫的可以實現特定目標或解決特定問題的程式碼集合。
  • 那我們換一種說法:
    • 程式是人使用電腦語言編寫的,可以實現一定功能,並且可以執行的程式碼集合。
    • 進程是正在執行中的程式。程式被執行時,執行人的許可權和屬性、以及程式的程式碼都會被載入如記憶體,作業系統給這個進程分配一個ID號,我們成為PID(進程ID)

3、進程管理的作用

  1. 判斷伺服器健康狀態:運維工程師最主要的工作就是保證伺服器安全穩定的運行。理想的狀態是,在伺服器出現問題,但是還沒有造成伺服器宕機或停止服務時,就人為干預解決了問題。進程管理最主要的工作就是判斷伺服器當前運行是否健康,是否需要人為干預。如果伺服器的CPU佔用率、記憶體佔用率過高,就需要人為介入解決問題了。
  2. 查看系統中所有的進程:我們需要查看系統中所有正在運行的進程,通過這些進程可以判斷系統中運行了哪些服務,是否有非法服務運行。
  3. 殺死進程:這是進程管理中最不常用的手段,當我需要停止服務時,會通過正確關閉命令來停止服務(如apache服務可以通過service httpd stop來關閉)。只有當正確終止進程的手段失效的情況下,才會考慮使用kill命令殺死進程(你不是殺手,不要什麼進程都用kill來終止,否則非常容易導致伺服器崩潰)

4、Linux進程的幾種狀態

  • D:不可被喚醒的睡眠狀態,通常用於I/O情況。
  • R:該進程正在運行。
  • S:該進程在睡眠狀態,可被喚醒。
  • T:停止狀態,可能是在後台暫停或進程在除錯狀態。
  • W:記憶體交互狀態(從2.6內核開始無效)。
  • X:死掉的進程(應該不會出現)。
  • Z:殭屍進程。進程已經終止,但是部分程式還在記憶體當中。
  • <:高優先順序(以下狀態在BSD格式當中出現)。
  • N:低優先順序。
  • L:被鎖入記憶體。
  • s:包含子進程。
  • l:多執行緒(小寫L)。
  • +:位於後台。

5、進程與執行緒的關係

(1)執行緒與進程的關係

比如電腦同時進行著200個進程:

  1. 執行緒與進程概念
    • 執行緒: 每個進程中至少包含一個執行緒,而這些執行緒都在共享進程的資源空間等,當執行緒發生變化的時候只會引起CPU執行的過程發生變化,不會改變進程所擁有的資源。同理一個程式中至少包含一個進程。進程中執行運算的最小單位,亦是執行處理機調度的基本單位
    • 進程: 每個進程都有自己的地址空間,資源如,記憶體,I/O,CPU,同一個進程里的 執行緒共享本進程里的地址空間,那能不能使用別人家進程的地址空間呢,顯然這是不可以的。由於進程的獨立性,當某一個進程崩潰之後,在保護模式下不會對別的進程進行影響。資源分配的基本單位,運行調度的基本單位,系統中並發執行的單位。
  2. 兩者的比較
    • 調度
      同一個進程中,執行緒的切換不會引起進程的切換。
      由一個進程的執行緒切換到另一個執行緒的進程時,引起進程的切換。
    • 並發性
      進程可以並發執行,而一個進程中的執行緒也可以並發執行。
    • 擁有的資源
      一般來說,執行緒並不會擁有自己的資源,但是它可以訪問自己本進程中的資源。比如,一個進程打開的文件等,進程中的其他執行緒是可以共享的。

(2)總結

我們簡單總結下:

  • 進程:指在系統中正在運行的一個應用程式,程式一旦運行就是進程,進程是資源分配的最小單位。
  • 執行緒:系統分配處理器時間資源的基本單元,或者說進程之內獨立執行的一個單元執行流,執行緒是程式執行的最小單位。

參考: