【linux】循序漸進學運維-基礎篇-進程管理


本文是循序漸進學運維-基礎篇系列的第44篇文章

本文我們主要來探討Linux下的進程,如果對你有幫助歡迎點贊收藏。

Linux進程

1. 進程的概念

Linux當中有很多用戶,每個用戶都可以同時運行多個程序,靠程序名來記憶每個程序,顯然不是一個好辦法。 Linux當中爲了區分每一個運行的程序,給沒給進程做了一個標識,這個標識我們叫他進程號(process ID) ,就像一個ip地址一樣,通過進程號來辨別每個進程。

操作系統給每個用戶賦予了權限,用戶可以控制自己的進程,比如分配不同的優先級,終止和啓動進程等。

進程一般由四個部分組成:

  1. 已分配的內存地址空間
  2. 安全屬性,包括所有權憑據和特權
  3. 程序代碼的一個或者多個執行進程
  4. 進程的狀態

進程的狀態一般有三種:

  1. 就緒狀態
  2. 執行狀態
  3. 阻塞狀態

三種狀態的轉換如圖:
在這裏插入圖片描述
簡單瞭解了進程之後,我們來看看進程的屬性:

2. 進程的屬性

進程ID(PID) : 這是用來區分進程的唯一標識
父進程的ID : PPID
進程的狀態: 運行(R),休眠(s)和殭屍(z)
centos6 系統啓動後的第一個進程是init, PID 是1.
centos7 PID 爲1的進程是systemd

3. 關於殭屍進程

殭屍進程: 一個進程使用fork創建子進程後,如果子進程退出,而父進程並沒有調用wait或waitpid獲取子進程的狀態信息,那麼子進程的進程描述仍然保存在系統中。這種進程就是殭屍進程。

任何一個子進程(init除外) 在exit() 之後,並非馬上消失,而是留下一個稱之爲殭屍進程的數據結構,等待父進程處理。如果這時候父進程沒有來的及處理,我們用ps命令就會看到大寫的Z的進程。 如果子進程結束前,父進程已經退出,這時候的子進程由init接管。 init會以父進程的身份對殭屍進程進行處理。

Linux管理的基本命令

1. ps命令

1) 常用參數:
選項 作用
a 顯示現行終端機下的所有進程,包括其他用戶的進程;
u 顯示進程擁有者、狀態、資源佔用等的詳細信息(注意有“-”和無“-”的區別);
x 顯示沒有控制終端的進程。通常與 a 這個參數一起使用,可列出較完整信息;
e 顯示所有進程;
f 完整輸出顯示進程之間的父子關係;
l 較長、較詳細的將該 PID 的的信息列出;
o 自定義顯示的字段;
2)常用組合
a) ps -aux

在這裏插入圖片描述
注: 最後一列[xxxx] 使用方括號括起來的進程是內核態的進程。 沒有括起來的是用戶態進程

b) ps-uax輸出的各個參數的含義如圖:
參數 含義
USER: 啓動這些進程的用戶
PID 進程的ID
%CPU 進程佔用的CPU百分比;
%MEM 佔用內存的百分比;
VSZ 進程佔用的虛擬內存大小(單位:KB)
RSS 進程佔用的物理內存大小(單位:KB)
STAT 該程序目前的狀態
START 該 process 被觸發啓動的時間;
TIME process 實際使用 CPU 運作的時間。
COMMAND 該程序的實際指令
c) Linux進程有5種基本狀態:
R |該程序目前正在運作,或者是可被運作;
S |該程序目前正在睡眠當中 (可說是 idle 狀態啦!),但可被某些訊號(signal) 喚醒。
T |該程序目前正在偵測或者是停止了;
 Z |該程序應該已經終止,但是其父程序卻無法正常的終止他,造成 zombie (疆屍) 程序的狀態
D  |不可中斷狀態.  

除了這5中狀態外還有一些延伸的狀態:

在這裏插入圖片描述

可以看到在S後面還有個小s, 或者有< 這類的拓展狀態 ,這些標記表示:

符號 含義
< 表示進程運行在高優先級上
N: 表示進程運行在低優先級上
L: 表示進程有頁面鎖定在內存中
s 表示進程是控制進程
l: 表示進程是多線程的
+: 表示當前進程運行在前臺

3) 舉例

a) 進程狀態查看

打開一個進程:
在這裏插入圖片描述
在另一個終端查看:
在這裏插入圖片描述

注: 此處顯示的是S,睡眠狀態,+表示在前臺。 意思是 在前臺睡眠狀態。如果我們把他調到後臺運行會怎麼樣呢?
在這裏插入圖片描述
查詢結果爲T: T表示出於停止狀態
在這裏插入圖片描述

b) ps的使用方法 -ef

ps -ef
-e 顯示所有進程
-f 顯示完整格式輸出
在這裏插入圖片描述
此處包含的信息和ps -aux 不同,我們來看一下具體的含義:

參數 含義
UID 啓動這些進程的用戶
PID 進程的ID
PPID 父進程的進程號
C 進程生命週期中的CPU利用率
STIME: 進程啓動時的系統時間
TTY 表明進程在哪個終端設備上運行。如果顯示 ?表示與終端無關,這種進程一般是內核態進程。另外, tty1-tty6 是本機上面的登入者程序,若爲 pts/0 等,則表示運行在虛擬終端上的進程。
TIME: 運行進程一共累計佔用的CPU時間
CMD: 啓動的程序名稱
c) 根據cpu/內存來升序排序

[root@zmgaosh log]# ps -aux --sort pcpu |less
[root@zmgaosh log]# ps -aux --sort pmem |less

補充:

使用PS實時監控進程狀態
[root@zmgaosh log]# watch -n 1 ‘ps -aux --sort -pmem,-pcpu’

總結:

ps uax 和ps -ef 兩者的輸出結果差別不大,只是展示結果不同
aux是BSD風格, -ef是System風格, 更重要的是aux會截斷command列。

我是高勝寒,一個在教培行業不忘初心的人, 關注我,一起學習,歡迎點贊收藏,我們下篇文章再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章