命令行格式:
名稱:ps
使用權限:所有使用者
使用方式:ps [options] [–help]
說明:顯示瞬間行程 (process) 的動態
參數:ps的參數非常多, 在此僅列出幾個常用的參數并大略介紹含義
-A 列出所有的進程
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細的資訊
-aux 顯示所有包含其他使用者的行程
ps命令常用用法:
(方便查看系統進程)
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去查找特定的進程,然后再對特定的進程進行操作。
ps常用參數舉例:
1,基本ps使用:
$ ps
結果默認會顯示4列信息。
PID: 運行著的命令(CMD)的進程編號
TTY: 命令所運行的位置(終端)
TIME: 運行著的該命令所占用的CPU處理時間
CMD: 該進程所運行的命令
這些信息在顯示時未排序。
2,列出目前所有的正在內存當中的程序。也許你希望把結果按照 CPU 或者內存用量來篩選,這樣你就找到哪個進程占用了你的資源。要做到這一點,我們可以使用?aux 參數,來顯示全面的信息:
$ ps -aux
Head標頭:
USER 用戶名
UID 用戶ID(User ID)
PID 進程ID(Process ID)
PPID 父進程的進程ID(Parent Process id)
SID 會話ID(Session id)
%CPU 進程的cpu占用率
%MEM 進程的內存占用率
VSZ 進程所使用的虛存的大?。╒irtual Size)
RSS 進程使用的駐留集大小或者是實際內存的大小,Kbytes字節。
TTY 與進程關聯的終端(tty)
STAT 進程的狀態:進程狀態使用字符表示的(STAT的狀態碼)
R 運行 Runnable (on run queue) 正在運行或在運行隊列中等待。
S 睡眠 Sleeping 休眠中, 受阻, 在等待某個條件的形成或接受到信號。
I 空閑 Idle
Z 僵死 Zombie(a defunct process) 進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用后釋放。
D 不可中斷 Uninterruptible sleep (ususally IO) 收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生。
T 終止 Terminate 進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行運行。
P 等待交換頁
W 無駐留頁 has no resident pages 沒有足夠的記憶體分頁可分配。
X 死掉的進程
< 高優先級進程 高優先序的進程
N 低優先 級進程 低優先序的進程
L 內存鎖頁 Lock 有記憶體分頁分配并縮在記憶體內
s 進程的領導者(在它之下有子進程);
l 多進程的(使用 CLONE_THREAD, 類似 NPTL pthreads)
+ 位于后臺的進程組
START 進程啟動時間和日期
TIME 進程使用的總cpu時間
COMMAND 正在執行的命令行命令
NI 優先級(Nice)
PRI 進程優先級編號(Priority)
WCHAN 進程正在睡眠的內核函數名稱;該函數的名稱是從/root/system.map文件中獲得的。
FLAGS 與進程相關的數字標識
4. 可以用 | 管道和 more 連接起來分頁查看。
命令:ps -aux |more
5. 把所有進程顯示出來,并輸出到ps001.txt文件
命令:ps -aux > ps001.txt
6. 輸出指定的字段
命令:ps -o pid,ppid,pgrp,session,tpgid,comm
7,根據?CPU 使用來升序排序
$ ps -aux –sort -pcpu | less
8,根據 內存使用 來升序排序
$ ps -aux –sort -pmem | less
9,樹形顯示進程
$ pstree
10,查看特定用戶進程
在需要查看特定用戶進程的情況下,我們可以使用?-u?參數。比如我們要查看用戶’pungki’的進程,可以通過下面的命令:
$ ps -u pungki
11,通過進程名和PID過濾
使用 -C 參數,后面跟你要找的進程的名字。比如想顯示一個名為getty的進程的信息,就可以使用下面的命令:
$ ps -C getty
12,顯示所有進程信息,連同命令行
命令:ps -ef
top:動態查看進程變化,監控linux的系統狀況。
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似于Windows的任務管理器。
下面詳細介紹它的使用方法。
統計信息區
前五行是系統整體的統計信息。第一行是任務隊列信息,同 uptime 命令的執行結果。其內容如下:
13:01:49 ? 當前時間
up 13 min ? 系統運行時間
1 user ? 當前登錄用戶數
load average: 0.00, 0.03, 0.06 ? 系統負載,即任務隊列的平均長度。
三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。
第二、三行為進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容如下:
Tasks:
total ? 進程總數
running ? 正在運行的進程數
sleeping ? 睡眠的進程數
stopped ? 停止的進程數
zombie ? 僵尸進程數
Cpu(s):
us ? 用戶空間占用CPU百分比
sy ? 內核空間占用CPU百分比
ni ? 用戶進程空間內改變過優先級的進程占用CPU百分比
id ? 空閑CPU百分比
wa ? 等待輸入輸出的CPU時間百分比
hi ? 硬中斷(Hardware IRQ)占用CPU的百分比
si ? 軟中斷(Software Interrupts)占用CPU的百分比
st ??(Steal time)?是當?hypervisor?服務另一個虛擬處理器的時候,虛擬?CPU?等待實際?CPU?的時間的百分比。
最后兩行為內存信息。內容如下:
Mem:
total ? 物理內存總量
used ? 使用的物理內存總量
free ? 空閑內存總量
buffers ? 用作內核緩存的內存量
Swap:
total ? 交換區總量
used ? 使用的交換區總量
free ? 空閑交換區總量
cached ? 緩沖的交換區總量。
內存中的內容被換出到交換區,而后又被換入到內存,但使用過的交換區尚未被覆蓋,
該數值即為這些內容已存在于內存中的交換區的大小。
相應的內存再次被換出時可不必再對交換區寫入。
進程信息區
統計信息區域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義。
序號 列名 含義
PID 進程id
PPID 父進程id
RUSER Real user name
d UID 進程所有者的用戶id
e USER 進程所有者的用戶名
f GROUP 進程所有者的組名
g TTY 啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
h PR 優先級
i NI nice值。負值表示高優先級,正值表示低優先級
j P 最后使用的CPU,僅在多CPU環境下有意義
k %CPU 上次更新到現在的CPU時間占用百分比
l TIME 進程使用的CPU時間總計,單位秒
m TIME+ 進程使用的CPU時間總計,單位1/100秒
n %MEM 進程使用的物理內存百分比
o VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
p SWAP 進程使用的虛擬內存中,被換出的大小,單位kb。
q RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
r CODE 可執行代碼占用的物理內存大小,單位kb
s DATA 可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb
t SHR 共享內存大小,單位kb
u nFLT 頁面錯誤次數
v nDRT 最后一次寫入到現在,被修改過的頁面數。
w S 進程狀態。
D=不可中斷的睡眠狀態
R=運行
S=睡眠
T=跟蹤/停止
Z=僵尸進程
x COMMAND 命令名/命令行
y WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名
z Flags 任務標志,參考 sched.h
默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列??梢酝ㄟ^下面的快捷鍵來更改顯示內容。
更改顯示內容
通過 f 鍵可以選擇顯示的內容。按 f 鍵之后會顯示列的列表,按 a-z 即可顯示或隱藏對應的列,最后按回車鍵確定。
按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以將相應的列向右移動,而大寫的 A-Z 可以將相應的列向左移動。最后按回車鍵確定。
按大寫的 F 或 O 鍵,然后按 a-z 可以將進程按照相應的列進行排序。而大寫的 R 鍵可以將當前的排序倒轉。
命令使用
1. 工具(命令)名稱
top
2.工具(命令)作用
顯示系統當前的進程和其他狀況; top是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態.如果在前臺執行該命令,它將獨占前臺,直到用戶終止該程序為止. 比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.內存使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定.
3.環境設置
在Linux下使用。
4.使用方法
4.1使用格式
top [-] [d] [p] [q] [C] [S] [s] [n]
4.2參數說明
-d 后接秒數,指定每兩次屏幕信息刷新之間的時間間隔,表示進程界面更新時間(默認為5秒)。
當然用戶可以使用s交互命令來改變之。
-b,-n搭配,批次執行top ?——> top -b -n 2 > /tmp/top.txt #將top進程表在/tmp/top.txt中打印2次。
-p 通過指定監控進程ID來僅僅監控某個進程的狀態。 ——> top -p 1 #查看進程號為1的進程。
-q 該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那么top將以盡可能高的優先級運行。
-S 指定累計模式
-s 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。
-i 使top不顯示任何閑置或者僵死進程。
-c 顯示整個命令行而不只是顯示命令名
Linux下命令TOP中的常用交互命令
各使用場景:
a.?2500毫秒刷新一次TOP內容,總共5次,輸出內容存放到performace.txt文件中
# top -b -d 2.5 -n 5 > performace.txt
注:要將內容輸出到文件中,必須使用-b,表示批處理選項
b.?TOP命令如何快速按%CPU、%MEM、TIME+列排序
a). %CPU:使用大寫字母按鍵:P
b). %MEM:使用大寫字母按鍵:M
c). TIME+:使用大寫字母按鍵: T
注:TOP默認排序為倒序,如果確實需要升序排序,可以使用大寫字母按鍵:R
c.?TOP命令中顯示其它列值、將兩列互換等
a). 選擇顯示列或隱藏列:使用小寫字母按鍵:f
c). 交換列顯示順序:使用小寫字母按鍵: o
b). 選擇需要排序的列:使用大寫字母按鍵:F
4.3 其他
下面介紹在top命令執行過程中可以使用的一些交互命令。從使用角度來看,熟練的掌握這些命令比掌握選項還重要一些。這些命令都是單字母的,如果在命令行選項中使用了s選項,則可能其中一些命令會被屏蔽掉。
Ctrl+L 擦除并且重寫屏幕。
h或者? 顯示幫助畫面,給出一些簡短的命令總結說明。
k 終止一個進程。系統將提示用戶輸入需要終止的進程PID,以及需要發送給該進程什么樣的信號。一般的終止進程可以使用15信號;如果不能正常結束那就使用信號9強制結束該進程。默認值是信號15。在安全模式中此命令被屏蔽。
i 忽略閑置和僵死進程。這是一個開關式命令。
q 退出程序。
r 重新安排一個進程的優先級別。系統提示用戶輸入需要改變的進程PID以及需要設置的進程優先級值。輸入一個正值將使優先級降低,反之則可以使該進程擁有更高的優先權。默認值是10。
S 切換到累計模式。
s 改變兩次刷新之間的延遲時間。系統將提示用戶輸入新的時間,單位為s。如果有小數,就換算成m s。輸入0值則系統將不斷刷新,默認值是5 s。需要注意的是如果設置太小的時間,很可能會引起不斷刷新,從而根本來不及看清顯示的情況,而且系統負載也會大大增加。
f或者F 從當前顯示中添加或者刪除項目。
o或者O 改變顯示項目的順序。
l 切換顯示平均負載和啟動時間信息。
m 切換顯示內存信息。
t 切換顯示進程和CPU狀態信息。
c 切換顯示命令名稱和完整命令行。
M 根據駐留內存大小進行排序。
P 根據CPU使用百分比大小進行排序。
T 根據時間/累計時間進行排序。
W 將當前設置寫入~/.toprc文件中。這是寫top配置文件的推薦方法。
kill
1.命令格式:
kill[參數][進程號]
2.命令功能:
發送指定的信號到相應進程。不指定型號將發送SIGTERM(15)終止指定進程。如果任無法終止該程序可用“-KILL”?參數,其發送的信號為SIGKILL(9)?,將強制結束進程,使用ps命令或者jobs?命令可以查看進程號。root用戶將影響用戶的進程,非root用戶只能影響自己的進程。
3.命令參數:
-l??信號,若果不加信號的編號參數,則使用“-l”參數會列出全部的信號名稱
-a??當處理當前進程時,不限制命令名和進程號的對應關系
-p??指定kill?命令只打印相關進程的進程號,而不發送任何信號
-s??指定發送信號
-u??指定用戶
注意:
1、kill命令可以帶信號號碼選項,也可以不帶。如果沒有信號號碼,kill命令就會發出終止信號(15),這個信號可以被進程捕獲,使得進程在退出之前可以清理并釋放資源。也可以用kill向進程發送特定的信號。例如:
kill?-2?123
它的效果等同于在前臺運行PID為123的進程時按下Ctrl+C鍵。但是,普通用戶只能使用不帶signal參數的kill命令或最多使用-9信號。
2、kill可以帶有進程ID號作為參數。當用kill向這些進程發送信號時,必須是這些進程的主人。如果試圖撤銷一個沒有權限撤銷的進程或撤銷一個不存在的進程,就會得到一個錯誤信息。
3、可以向多個進程發信號或終止它們。
4、當kill成功地發送了信號后,shell會在屏幕上顯示出進程的終止信息。有時這個信息不會馬上顯示,只有當按下Enter鍵使shell的命令提示符再次出現時,才會顯示出來。
5、應注意,信號使進程強行終止,這常會帶來一些副作用,如數據丟失或者終端無法恢復到正常狀態。發送信號時必須小心,只有在萬不得已時,才用kill信號(9),因為進程不能首先捕獲它。要撤銷所有的后臺作業,可以輸入kill?0。因為有些在后臺運行的命令會啟動多個進程,跟蹤并找到所有要殺掉的進程的PID是件很麻煩的事。這時,使用kill?0來終止所有由當前shell啟動的進程,是個有效的方法。
4.使用實例:
實例1:列出所有信號名稱
命令:
kill?-l
輸出:
[root@localhost?test6]#?kill?-l
1)?SIGHUP???????2)?SIGINT???????3)?SIGQUIT??????4)?SIGILL
5)?SIGTRAP??????6)?SIGABRT??????7)?SIGBUS???????8)?SIGFPE
9)?SIGKILL?????10)?SIGUSR1?????11)?SIGSEGV?????12)?SIGUSR2
13)?SIGPIPE?????14)?SIGALRM?????15)?SIGTERM?????16)?SIGSTKFLT
17)?SIGCHLD?????18)?SIGCONT?????19)?SIGSTOP?????20)?SIGTSTP
21)?SIGTTIN?????22)?SIGTTOU?????23)?SIGURG??????24)?SIGXCPU
25)?SIGXFSZ?????26)?SIGVTALRM???27)?SIGPROF?????28)?SIGWINCH
29)?SIGIO???????30)?SIGPWR??????31)?SIGSYS??????34)?SIGRTMIN
35)?SIGRTMIN+1??36)?SIGRTMIN+2??37)?SIGRTMIN+3??38)?SIGRTMIN+4
39)?SIGRTMIN+5??40)?SIGRTMIN+6??41)?SIGRTMIN+7??42)?SIGRTMIN+8
43)?SIGRTMIN+9??44)?SIGRTMIN+10?45)?SIGRTMIN+11?46)?SIGRTMIN+12
47)?SIGRTMIN+13?48)?SIGRTMIN+14?49)?SIGRTMIN+15?50)?SIGRTMAX-14
51)?SIGRTMAX-13?52)?SIGRTMAX-12?53)?SIGRTMAX-11?54)?SIGRTMAX-10
55)?SIGRTMAX-9??56)?SIGRTMAX-8??57)?SIGRTMAX-7??58)?SIGRTMAX-6
59)?SIGRTMAX-5??60)?SIGRTMAX-4??61)?SIGRTMAX-3??62)?SIGRTMAX-2
63)?SIGRTMAX-1??64)?SIGRTMAX
說明:
只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略。 下面是常用的信號:
HUP????1????終端斷線
INT?????2????中斷(同?Ctrl?+?C)
QUIT????3????退出(同?Ctrl?+?\)
TERM???15????終止
KILL????9????強制終止
CONT???18????繼續(與STOP相反,?fg/bg命令)
STOP????19????暫停(同?Ctrl?+?Z)
實例2:得到指定信號的數值
命令:
輸出:
[root@localhost?test6]#?kill?-l?KILL
9[root@localhost?test6]#?kill?-l?SIGKILL
9[root@localhost?test6]#?kill?-l?TERM
15[root@localhost?test6]#?kill?-l?SIGTERM
15[root@localhost?test6]#
說明:
實例3:先用ps查找進程,然后用kill殺掉
命令:
kill?3268
輸出:
[root@localhost?test6]#?ps?-ef|grep?vim
root??????3268??2884??0?16:21?pts/1????00:00:00?vim?install.log
root??????3370??2822??0?16:21?pts/0????00:00:00?grep?vim
[root@localhost?test6]#?kill?3268
[root@localhost?test6]#?kill?3268
-bash:?kill:?(3268)?–?沒有那個進程
[root@localhost?test6]#
說明:
實例4:徹底殺死進程
命令:
kill?–9?3268
輸出:
[root@localhost?test6]#?ps?-ef|grep?vim
root??????3268??2884??0?16:21?pts/1????00:00:00?vim?install.log
root??????3370??2822??0?16:21?pts/0????00:00:00?grep?vim
[root@localhost?test6]#?kill?–9?3268
[root@localhost?test6]#?kill?3268
-bash:?kill:?(3268)?–?沒有那個進程
[root@localhost?test6]#
說明:
實例5:殺死指定用戶所有進程
命令:
kill?-9?$(ps?-ef?|?grep?peidalinux)
kill?-u?peidalinux
輸出:
[root@localhost?~]#?kill?-9?$(ps?-ef?|?grep?peidalinux)
[root@localhost?~]#?kill?-u?peidalinux
說明:
方法一,過濾出hnlinux用戶進程并殺死
實例6:init進程是不可殺的
命令:
kill?-9?1
輸出:
[root@localhost?~]#?ps?-ef|grep?init
root?????????1?????0??0?Nov02??????????00:00:00?init?[3]
root?????17563?17534??0?17:37?pts/1????00:00:00?grep?init
[root@localhost?~]#?kill?-9?1
[root@localhost?~]#?kill?-HUP?1
[root@localhost?~]#?ps?-ef|grep?init
root?????????1?????0??0?Nov02??????????00:00:00?init?[3]
root?????17565?17534??0?17:38?pts/1????00:00:00?grep?init
[root@localhost?~]#?kill?-KILL?1
[root@localhost?~]#?ps?-ef|grep?init
root?????????1?????0??0?Nov02??????????00:00:00?init?[3]
root?????17567?17534??0?17:38?pts/1????00:00:00?grep?init
[root@localhost?~]#
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97573