Linux PS 命令詳解


Linux操作系統PS命令詳細解析

要對系統中進程進行監測控制,用 ps 命令滿足你。

/bin/ps

ps 是顯示瞬間行程的狀態,並不動態連續;如果想對進程運行時間監控,應該用 top 工具。

kill 用於殺死進程。

==============ps 的參數說明============================

l 長格式輸出;

u 按用戶名和啟動時間的順序來顯示進程;

j 用任務格式來顯示進程;

f 用樹形格式來顯示進程;

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、k1、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 輸出的解釋=========================

2、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去查找特定的進程,然后再對特定的進程進行操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM