如何按名稱或PID查詢一個程式?如何按埠號查詢一個程式?如何檢視一個程式的CPU和記憶體、檔案控制程式碼使用情況?如何檢視CPU利用率高的TOP10程式清單?如何根據PID強制終止程式?

Angel_L發表於2020-10-24

如何按名稱或PID查詢一個程式?如何按埠號查詢一個程式?如何檢視一個程式的CPU和記憶體、檔案控制程式碼使用情況?如何檢視CPU利用率高的TOP10程式清單?

程式介紹

程式

程式狀態的字母代表

在使用命令查出程式的資訊後,程式的 STAT 頭代表程式的當前狀態。
R(執行):程式正在執行或在執行佇列中等待。
S(中斷):程式處於休眠中,當某個條件形成後或者接收到訊號時,則脫離該 狀態。
D(不可中斷):程式不響應系統非同步訊號,即便用kill命令也不能將其中斷。
Z(僵死):程式已經終止,但程式描述符依然存在, 直到父程式呼叫wait4()系統函式後將程式釋放。
T(停止):程式收到停止訊號後停止執行。

有關命令介紹

lsof

lsof - list open files
列出開啟的檔案

netstat

netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
列印網路連線、路由表、介面統計資訊、偽裝連線和
多播會員

grep

grep, egrep, fgrep - print lines matching a pattern
列印匹配模式的字元

|

| 表示管道,上一條命令的輸出,作為下一條命令引數,如 echo 'yes' | wc -l

&

& 表示任務在後臺執行,如要在後臺執行redis-server,則有 redis-server &

&&

&& 表示前一條命令執行成功時,才執行後一條命令 ,如 echo '1‘ && echo '2'

||

|| 表示上一條命令執行失敗後,才執行下一條命令,如 cat nofile || echo "fail"

程式命令介紹

命令 ps

用標準語法檢視系統上的每一個程式

ps -e
ps -ef
ps -eF
ps -ely

使用BSD語法檢視系統上的每個程式

ps ax
ps axu

-a:顯示所有程式(包括其他使用者的程式)
-u:使用者以及其他詳細資訊
-x:顯示沒有控制終端的程式

ps 命令引數介紹

-e:  Select all processes.  Identical to -A.
-a:顯示所有程式(包括其他使用者的程式)  
-u:使用者以及其他詳細資訊  
-x:顯示沒有控制終端的程式 

如何按名稱或PID查詢一個程式

#名稱
ps -ef|grep tomcat
#PID
ps -ef|grep 17850

如何按埠號查詢一個程式

lsof -i:3306
netstat -nlp|grep :3306
netstat:
-n: Show numerical addresses instead of trying to determine symbolic host, port or user names.
顯示數字地址,而不是試圖確定符號主機、埠或使用者名稱
-p: Show the PID and name of the program to which each socket belongs
顯示每個套接字所屬的程式的PID和名稱
-l:Show only listening sockets 
只顯示監聽套接字
ps -ef|grep 3306

如何檢視一個程式的CPU和記憶體、檔案控制程式碼使用情況

檢視一個程式的CPU和記憶體

top -p 17850

檔案控制程式碼

在檔案I/O中,要從一個檔案讀取資料,應用程式首先要呼叫作業系統函式並傳送檔名,並選一個到該檔案的路徑來開啟檔案。該函式取回一個順序號,即檔案控制程式碼(file handle)

lsof -p 【PID】檢視程式PID開啟的檔案控制程式碼詳細資訊(lsof -p 17850)
lsof -p 17850|wc -l 檢視程式pid開啟檔案控制程式碼的數量
lsof |wc -l 檢視所有程式的檔案開啟數

COMMAND:程式的名稱
PID:程式識別符號
USER:程式所有者
FD:檔案描述符,應用程式通過檔案描述符識別該檔案。如 cwd、txt等
TYPE:檔案型別,如 DIR、REG、IPV4、FIEO等
DEVICE:指定磁碟的名稱
SIZE:檔案的大小
NODE:索引節點(檔案在磁碟上的標識)
NAME:開啟檔案的確切名稱

如何檢視CPU利用率高的TOP10程式清單

#CPU
top:使用top命令然後按下M(大寫)
#記憶體
以此類推檢視記憶體按下P

只看前十

#cpu
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
#記憶體
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

其中第一句主要是為了獲取標題(USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND)。
接下來的grep -v PID是將ps aux命令得到的標題去掉,即grep不包含PID這三個字母組合的行,再將其中結果使用sort排序。
sort -rn -k +3該命令中的-rn的r表示是結果倒序排列,n為以數值大小排序,而-k +3則是針對第3列的內容進行排序,再使用head命令獲取預設前10行資料。(其中的|表示管道操作)
PID:程式的ID
USER:程式所有者
PR:程式的優先順序別,越小越優先被執行
NInice:值
VIRT:程式佔用的虛擬記憶體
RES:程式佔用的實體記憶體
SHR:程式使用的共享記憶體
S:程式的狀態。S表示休眠,R表示正在執行,Z表示僵死狀態,N表示該程式優先值為負數
%CPU:程式佔用CPU的使用率
%MEM:程式使用的實體記憶體和總記憶體的百分比
TIME+:該程式啟動後佔用的總的CPU時間,即佔用CPU使用時間的累加值。
COMMAND:程式啟動命令名稱

如何根據PID強制終止程式

kill -Signal pid
signal是傳送給程式的訊號, 可以使用 kill -l 列出所有的訊號值
預設引數下,kill 傳送SIGTERM(15)訊號給程式,告訴程式,你需要被關閉,請自行停止執行並退出。

kill -9 pid (kill -9 1234)

kill -9 傳送SIGKILL訊號給程式,SIGKILL是傳送給一個程式來導致它立即終止的訊號
TERM(或數字9)表示“無條件終止”;
kill - 9 表示強制殺死該程式

相關文章