Linux進程管理

1 引言

進程是操做系統中的一個基本概念,是操做系統進行分配和資源管理的基本單位,從字面上能夠理解能夠認爲進程就是「進行中的程序」,實際也確實是如此,由於進程本就是一個動態的概念,若是說程序是靜止的,那麼進程就是活動的、有生命的,是運行中的程序。

2 進程

爲方便後續內容展開,先來介紹幾個進程相關的概念。
(1)進程的狀態
進程的整個生命週期包括5個狀態:新建、就緒、阻塞、運行和終止,各狀態的含義正如字面意思:
新建:程序正在被建立
就緒:程序正在等待CPU執行
阻塞:程序正在等待某一事件發生,而後才能運行
運行:程序已搶佔到CPU資源,正在被執行
終止:程序運行結束。
其中的狀態轉換以下如所示。
(2)父進程與子進程
在程序執行過程當中,可能會產生多個進程,每個進程又能夠建立新的進程,新建立的進程稱爲子進程,建立子進程的進程稱爲父進程。爲區分不一樣的進程,每個進程有一個PID屬性,這是每個進程的惟一標示,此外每個進程還有一個PPID,指的是父進程的PID。
(3)殭屍進程與孤兒進程
孤兒進程:一個父進程退出,而它的一個或多個子進程還在運行,那麼那些子進程將成爲孤兒進程。孤兒進程將被init進程(進程號爲1)所收養,並由init進程對它們完成狀態收集工做。
殭屍進程:一個進程使用fork建立子進程,若是子進程退出,而父進程並無調用wait或waitpid獲取子進程的狀態信息,那麼子進程的進程描述符仍然保存在系統中。這種進程稱之爲僵死進程。

3 查看進程

查看進程有多種方法,經過ps命令是用的較多的一種方法。ps接受多種不一樣風格形式的參數(UNIX風格,BSD風格),但功能上沒有多大區別,故只須要掌握一種便可,爲方便記憶理解,本文也只介紹UNIX風格的命令參數使用。
(1)查看全部進程
  • ps -e
字段名
PID
TTY
TIME
CMD
字段含義
進程ID
啓動進程的終端名
進程共佔用CPU的時間
啓動進程的命令
示例
1
00:00:06
systemd
  • ps -ef
字段名
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)指定字段進行查看
  • ps -eo pid,ppid,cmd
 
(3)指定進程信息中包含字符串查找進程
例如,查找全部進程中包含ssh字符串的進程:
  • ps -ef |grep ssh
(4)輸出指定字段
只輸出pid和ppid:
  • ps -ef -o 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來查看具體使用方法。
相關文章
相關標籤/搜索