如何按名稱或PID查找一個進程?如何按埠號查找一個進程?如何查看一個進程的CPU和記憶體、文件句柄使用情況?如何查看CPU利用率高的TOP10進程清單?如何根據PID強制終止進程?

如何按名稱或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 表示強制殺死該進程

Tags: