1 引言
進程是操做系統中的一個基本概念,是操做系統進行分配和資源管理的基本單位,從字面上能夠理解能夠認爲進程就是「進行中的程序」,實際也確實是如此,由於進程本就是一個動態的概念,若是說程序是靜止的,那麼進程就是活動的、有生命的,是運行中的程序。
2 進程
爲方便後續內容展開,先來介紹幾個進程相關的概念。
(1)進程的狀態
進程的整個生命週期包括5個狀態:新建、就緒、阻塞、運行和終止,各狀態的含義正如字面意思:
新建:程序正在被建立
就緒:程序正在等待CPU執行
阻塞:程序正在等待某一事件發生,而後才能運行
運行:程序已搶佔到CPU資源,正在被執行
終止:程序運行結束。
其中的狀態轉換以下如所示。
(2)父進程與子進程
在程序執行過程當中,可能會產生多個進程,每個進程又能夠建立新的進程,新建立的進程稱爲子進程,建立子進程的進程稱爲父進程。爲區分不一樣的進程,每個進程有一個PID屬性,這是每個進程的惟一標示,此外每個進程還有一個PPID,指的是父進程的PID。
(3)殭屍進程與孤兒進程
孤兒進程:一個父進程退出,而它的一個或多個子進程還在運行,那麼那些子進程將成爲孤兒進程。孤兒進程將被init進程(進程號爲1)所收養,並由init進程對它們完成狀態收集工做。
殭屍進程:一個進程使用fork建立子進程,若是子進程退出,而父進程並無調用wait或waitpid獲取子進程的狀態信息,那麼子進程的進程描述符仍然保存在系統中。這種進程稱之爲僵死進程。
3 查看進程
查看進程有多種方法,經過ps命令是用的較多的一種方法。ps接受多種不一樣風格形式的參數(UNIX風格,BSD風格),但功能上沒有多大區別,故只須要掌握一種便可,爲方便記憶理解,本文也只介紹UNIX風格的命令參數使用。
(1)查看全部進程
字段名
|
PID
|
TTY
|
TIME
|
CMD
|
字段含義
|
進程ID
|
啓動進程的終端名
|
進程共佔用CPU的時間
|
啓動進程的命令
|
示例
|
1
|
?
|
00:00:06
|
systemd
|
字段名
|
UID
|
PID
|
PPID
|
C
|
STIME
|
TTY
|
TIME
|
CMD
|
字段含義
|
進程用戶ID
|
進程ID
|
父進程ID
|
CPU調度狀況
|
進程啓動的時間
|
啓動進程的終端名
|
進程共佔用CPU的時間
|
啓動進程的命令
|
示例
|
root
|
1
|
0
|
0
|
07:36
|
?
|
00:00:06
|
/sbin/init
|
另外還有ps -a 用於顯示當前終端的全部進程,ps -A與ps-e顯示信息徹底同樣。
(2)指定字段進行查看
(3)指定進程信息中包含字符串查找進程
例如,查找全部進程中包含ssh字符串的進程:
(4)輸出指定字段
只輸出pid和ppid:
(5)輸出指定進程ID的進程信息
- ps -p 5710 -o pid,ppid # 查看id爲5710的進程信息
最後對經常使用字段及其含義作一個列表總結:
cmd
|
啓動進程的命令
|
pcpu
|
CPU利用率
|
flags
|
長格式F字段中的標誌
|
pgrp
|
進程組ID
|
tpgid
|
控制TTY進程組ID
|
cutime
|
累計用戶時間
|
cstime
|
累計系統時間
|
utime
|
用戶時間
|
min_flt
|
次要頁面錯誤數
|
maj_flt
|
主要頁面錯誤數
|
cmin_flt
|
累積次要頁錯誤
|
cmaj_flt
|
累積主要頁面錯誤
|
session
|
會話ID
|
pid
|
進程ID
|
ppid
|
父進程ID
|
rss
|
常駐集大小
|
resident
|
常駐頁面
|
size
|
內存大小(以千字節爲單位)
|
share
|
共享頁數
|
tty
|
控制TTY的終端號
|
start_time
|
啓動進程的時間
|
uid
|
用戶ID
|
user
|
用戶名
|
vsize
|
總虛擬機大小(kib)
|
priority
|
內核調度優先級
|
更多內容再也不介紹,事實上,更多詳細信息能夠經過man ps來查看具體使用方法。