Linux操做系統PS命令詳細解析linux
要對系統中進程進行監測控制,用 ps 命令知足你。shell
/bin/psruby
ps 是顯示瞬間行程的狀態,並不動態連續;若是想對進程運行時間監控,應該用 top 工具。bash
kill 用於殺死進程。網絡
==============ps 的參數說明============================session
l 長格式輸出;ssh
u 按用戶名和啓動時間的順序來顯示進程;ide
j 用任務格式來顯示進程;工具
f 用樹形格式來顯示進程;ui
a 顯示全部用戶的全部進程(包括其它用戶);
x 顯示無控制終端的進程;
r 顯示運行中的進程;
ww 避免詳細參數被截斷;
-A 列出全部的行程
-w 顯示加寬能夠顯示較多的資訊
-au 顯示較詳細的資訊
-aux 顯示全部包含其餘使用者的行程
-e 顯示全部進程,環境變量
-f 全格式
-h 不顯示標題
-l 長格式
-w 寬輸出
a 顯示終端上地全部進程,包括其餘用戶地進程
r 只顯示正在運行地進程
x 顯示沒有控制終端地進程
咱們經常使用的選項是組合是 aux 或 lax,還有參數 f 的應用。
ps:將某個時間點的程序運做狀況擷取下來
[root
@linux
~]
# ps aux
[root
@linux
~]
# ps -lA
[root
@linux
~]
# ps axjf
參數:
-
A
:全部的 process 均顯示出來,與 -e 具備一樣的效用;
-a :不與 terminal 有關的全部 process ;
-u :有效使用者 (effective user) 相關的 process ;
x :一般與 a 這個參數一塊兒使用,可列出較完整信息。
輸出格式規劃:
l :較長、較詳細的將該
PID
的的信息列出;
j :工做的格式 (jobs format)
-f :作一個更爲完整的輸出。
特別說明:
因爲 ps 可以支持的
OS
類型至關的多,因此他的參數多的離譜!
並且有沒有加上 - 差不少!詳細的用法應該要參考 man ps 喔!
|
範例1:將目前屬於您本身此次登入的 PID 與相關信息列示出來
[root
@linux
~]
# ps -l
F
S
UID
PID
PPID
C
PRI
NI
ADDR
SZ
WCHAN
TTY
TIME
CMD
0
S
0
5881
5654
0
76
0
-
1303
wait pts/
0
00
:
00
:
00
su
4
S
0
5882
5881
0
75
0
-
1349
wait pts/
0
00
:
00
:
00
bash
4
R
0
6037
5882
0
76
0
-
1111
- pts/
0
00
:
00
:
00
ps
|
# 上面這個信息其實不少喔!各相關信息的意義爲:
# F 表明這個程序的旗標 (flag), 4 表明使用者爲 super user;
# S 表明這個程序的狀態 (STAT),關於各 STAT 的意義將在內文介紹;
# PID 沒問題吧!?就是這個程序的 ID 啊!底下的 PPID 則上父程序的 ID;
# C CPU 使用的資源百分比
# PRI 這個是 Priority (優先執行序) 的縮寫,詳細後面介紹;
# NI 這個是 Nice 值,在下一小節咱們會持續介紹。
# ADDR 這個是 kernel function,指出該程序在內存的那個部分。若是是個 running
# 的程序,通常就是『 - 』的啦!
# SZ 使用掉的內存大小;
# WCHAN 目前這個程序是否正在運做當中,若爲 - 表示正在運做;
# TTY 登入者的終端機位置囉;
# TIME 使用掉的 CPU 時間。
# CMD 所下達的指令爲什麼!?
# 仔細看到每個程序的 PID 與 PPID 的相關性爲什麼喔!上頭列出的三個程序中,
# 彼此間但是有相關性的吶!
|
範例2:列出目前全部的正在內存當中的程序
[root
@linux
~]
# ps aux
USER
PID
%
CPU
%
MEM
VSZ
RSS
TTY
STAT
START
TIME
COMMAND
root
1
0
.
0
0
.
1
1740
540
?
S
Jul25
0
:
01
init [
3
]
root
2
0
.
0
0
.
0
0
0
?
SN
Jul25
0
:
00
[ksoftirqd/
0
]
root
3
0
.
0
0
.
0
0
0
?
S
< Jul25
0
:
00
[events/
0
]
.....中間省略.....
root
5881
0
.
0
0
.
3
5212
1204
pts/
0
S
10
:
22
0
:
00
su
root
5882
0
.
0
0
.
3
5396
1524
pts/
0
S
10
:
22
0
:
00
bash
root
6142
0
.
0
0
.
2
4488
916
pts/
0
R
+
11
:
45
0
:
00
ps aux
|
•
USER
:該 process 屬於那個使用者帳號的?
•
PID
:該 process 的號碼。
• %
CPU
:該 process 使用掉的
CPU
資源百分比;
• %
MEM
:該 process 所佔用的物理內存百分比;
•
VSZ
:該 process 使用掉的虛擬內存量 (Kbytes)
•
RSS
:該 process 佔用的固定的內存量 (Kbytes)
•
TTY
:該 process 是在那個終端機上面運做,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者程序,若爲 pts/
0
等等的,則表示爲由網絡鏈接進主機的程序。
•
STAT
:該程序目前的狀態,主要的狀態有:
o
R
:該程序目前正在運做,或者是可被運做;
o
S
:該程序目前正在睡眠當中 (可說是 idle 狀態啦!),但可被某些訊號 (signal) 喚醒。
o
T
:該程序目前正在偵測或者是中止了;
o
Z
:該程序應該已經終止,可是其父程序卻沒法正常的終止他,形成 zombie (疆屍) 程序的狀態
•
START
:該 process 被觸發啓動的時間;
•
TIME
:該 process 實際使用
CPU
運做的時間。
•
COMMAND
:該程序的實際指令爲什麼?
|
範例3:以範例一的顯示內容,顯示出全部的程序
[root
@linux
~]
# ps -lA
F
S
UID
PID
PPID
C
PRI
NI
ADDR
SZ
WCHAN
TTY
TIME
CMD
4
S
0
1
0
0
76
0
-
435
- ?
00
:
00
:
01
init
1
S
0
2
1
0
94
19
-
0
ksofti ?
00
:
00
:
00
ksoftirqd/
0
1
S
0
3
1
0
70
-
5
-
0
worker ?
00
:
00
:
00
events/
0
.....如下省略.....
|
範例4:列出相似程序樹的程序顯示
[root
@linux
~]
# ps -axjf
PPID
PID
PGID
SID
TTY
TPGID
STAT
UID
TIME
COMMAND
0
1
0
0
? -
1
S
0
0
:
01
init [
3
]
1
2
0
0
? -
1
SN
0
0
:
00
[ksoftirqd/
0
]
.....中間省略.....
1
5281
5281
5281
? -
1
Ss
0
0
:
00
/usr/sbin/sshd
5281
5651
5651
5651
? -
1
Ss
0
0
:
00
\
_
sshd: dmtsai [priv]
5651
5653
5651
5651
? -
1
S
500
0
:
00
\
_
sshd: dmtsai
@pts
/
0
5653
5654
5654
5654
pts/
0
6151
Ss
500
0
:
00
\
_
-bash
5654
5881
5881
5654
pts/
0
6151
S
0
0
:
00
\
_
su
5881
5882
5882
5654
pts/
0
6151
S
0
0
:
00
\
_
bash
5882
6151
6151
5654
pts/
0
6151
R
+
0
0
:
00
\
_
ps -axjf
|
範例5:找出與 cron 與 syslog 這兩個服務有關的 PID 號碼
[root
@linux
~]
# ps aux | egrep '(cron|syslog)'
root
1539
0
.
0
0
.
1
1616
616
? Ss Jul25
0
:
03
syslogd -m
0
root
1676
0
.
0
0
.
2
4544
1128
? Ss Jul25
0
:
00
crond
root
6157
0
.
0
0
.
1
3764
664
pts/
0
R
+
12
:
10
0
:
00
egrep (cron|syslog)
|
在預設的狀況下, ps 僅會列出與目前所在的 bash shell 有關的 PID 而已,因此, 當我使用 ps -l 的時候,只有三個 PID (範例一)。
O[+|-] k1 [,[+|-] k2 [,…]] 根據SHORT KEYS、k一、k2中快捷鍵指定地多級排序順序顯示進程列表.
對於ps地不一樣格式都存在着默認地順序指定.這些默認順序能夠被用戶地指定所覆蓋.在這裏面「+」字符是可選地,「-」字符是倒轉指定鍵地方向.
pids只列出進程標識符,之間運用逗號分隔.該進程列表必須在命令行參數地最後一個選項後面緊接着給出,中間不能插入空格.好比:ps -f1,4,5.
下介紹長命令行選項,這些選項都運用「--」開頭:
--sort X[+|-] key [,[+|-] key [,…]] 從SORT KEYS段中選一個多字母鍵.「+」字符是可選地,由於默認地方向就是按數字升序或者詞典順序.好比: ps -jax -sort=uid,-
ppid,+pid.
--help 顯示幫助信息.
--version 顯示該命令地版本信息.
在前面地選項說明中提到了排序鍵,接下來對排序鍵做進一步說明.須要注意地是排序中運用地值是ps運用地內部值,並不是僅用於某些輸出格式地僞值.排序鍵列表見下表.
============排序鍵列表==========================
c cmd 可執行地簡單名稱
C cmdline 完整命令行
f flags 長模式標誌
g pgrp 進程地組ID
G tpgid 控制tty進程組ID
j cutime 累計用戶時間
J cstime 累計系統時間
k utime 用戶時間
K stime 系統時間
m min_flt 次要頁錯誤地數量
M maj_flt 重點頁錯誤地數量
n cmin_flt 累計次要頁錯誤
N cmaj_flt 累計重點頁錯誤
o session 對話ID
p pid 進程ID
P ppid 父進程ID
r rss 駐留大小
R resident 駐留頁
s size 內存大小(千字節)
S share 共享頁地數量
t tty tty次要設備號
T start_time 進程啓動地時間
U uid UID
u user 用戶名
v vsize 總地虛擬內存數量(字節)
y priority 內核調度優先級
================================================
=================ps aux 或 lax 輸出的解釋=========================
二、ps aux 或 lax 輸出的解釋
au(x) 輸出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 進程全部者
PID: 進程ID
%CPU: 佔用的 CPU 使用率
%MEM: 佔用的內存使用率
VSZ: 佔用的虛擬內存大小
RSS: 佔用的內存大小
TTY: 終端的次要裝置號碼 (minor device number of tty)
STAT: 進程狀態:
START: 啓動進程的時間;
TIME: 進程消耗CPU的時間;
COMMAND:命令的名稱和參數;
=================進程STAT狀態====================
D 沒法中斷的休眠狀態(一般 IO 的進程);
R 正在運行,在可中斷隊列中;
S 處於休眠狀態,靜止狀態;
T 中止或被追蹤,暫停執行;
W 進入內存交換(從內核2.6開始無效);
X 死掉的進程;
Z 殭屍進程不存在但暫時沒法消除;
W: 沒有足夠的記憶體分頁可分配
WCHAN 正在等待的進程資源;
<: 高優先級進程
N: 低優先序進程
L: 有記憶體分頁分配並鎖在記憶體內 (即時系統或捱A I/O),即,有些頁被鎖進內存
s 進程的領導者(在它之下有子進程);
l 多進程的(使用 CLONE_THREAD, 相似 NPTL pthreads);
+ 位於後臺的進程組;
================kill 終止進程=========================
kill 終止進程
有十幾種控制進程的方法,下面是一些經常使用的方法:
kill -STOP [pid]
發送SIGSTOP (17,19,23)中止一個進程,而並不消滅這個進程。
kill -CONT [pid]
發送SIGCONT (19,18,25)從新開始一箇中止的進程。
kill -KILL [pid]
發送SIGKILL (9)強迫進程當即中止,而且不實施清理操做。
kill -9 -1
終止你擁有的所有進程。
SIGKILL 和 SIGSTOP 信號不能被捕捉、封鎖或者忽略,可是,其它的信號能夠。因此這是你的終極武器。
=================範例========================
$ ps
PID TTY TIME COMMAND
5800 ttyp0 00:00:00 bash
5835 ttyp0 00:00:00 ps
能夠看到,顯示地項目共分爲四項,依次爲PID(進程ID)、TTY(終端名稱)、TIME(進程執行時間)、COMMAND(該進程地命令行輸入).
能夠運用u選項來查看進程全部者及其餘少量詳細信息,以下所示:
$ ps u
USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND
test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash
test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u
在bash進程前面有條橫線,意味着該進程即是用戶地登陸shell,因此對於一個登陸用戶來講帶短橫線地進程只有一個.還能夠看到%CPU、%MEM兩個選項,前者指該進程佔用地CPU時間
和總時間地百分比;後者指該進程佔用地內存和總內存地百分比.
在這種狀況下看到了全部控制終端地進程;固然對於其餘那些沒有控制終端地進程仍是沒有觀察到,因此這時就須要運用x選項.運用x選項能夠觀察到全部地進程狀況.
1)ps a 顯示現行終端機下的全部程序,包括其餘用戶的程序。
2)ps -A 顯示全部程序。
3)ps c 列出程序時,顯示每一個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。
4)ps -e 此參數的效果和指定"A"參數相同。
5)ps e 列出程序時,顯示每一個程序所使用的環境變量。
6)ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關係。
7)ps -H 顯示樹狀結構,表示程序間的相互關係。
8)ps -N 顯示全部的程序,除了執行ps指令終端機下的程序以外。
9)ps s 採用程序信號的格式顯示程序情況。
10)ps S 列出程序時,包括已中斷的子程序資料。
11)ps -t<終端機編號> 指定終端機編號,並列出屬於該終端機的程序的情況。
12)ps u 以用戶爲主的格式來顯示程序情況。
13)ps x 顯示全部程序,不以終端機來區分。
最經常使用的方法是ps -aux,而後再用管道符號導向到grep去查找特定的進程,而後再對特定的進程進行操做。