一分鐘學(xué)一個(gè) Linux 命令 - ps
前言
大家好,我是 god23bin。歡迎來到《一分鐘學(xué)一個(gè) Linux 命令》系列,每天只需一分鐘,記住一個(gè) Linux 命令不成問題。今天要說的是 ps
命令。
什么是 ps 命令?
ps
的英文全稱是 process status
,意思是進(jìn)程狀態(tài)。
ps
命令是一個(gè)常用的 Linux 命令,用于查看當(dāng)前系統(tǒng)中運(yùn)行的進(jìn)程信息。它提供了關(guān)于進(jìn)程的各種詳細(xì)信息,如進(jìn)程 ID(PID)、進(jìn)程狀態(tài)、CPU 使用情況、內(nèi)存占用、運(yùn)行時(shí)間等。
如何使用 ps 命令?
ps
命令的基本語(yǔ)法如下:
shell復(fù)制代碼ps [選項(xiàng)參數(shù)]
可以通過添加不同的選項(xiàng)來獲取不同類型的進(jìn)程信息。
直接輸入 ps
,顯示當(dāng)前進(jìn)程:
shell復(fù)制代碼ps
輸出結(jié)果包含 4 列信息:PID、TTY、TIME、CMD
PID:(Process ID)唯一的進(jìn)程 ID
TTY:(Teletypewriter)它指的是終端類型或終端設(shè)備,用于用戶與計(jì)算機(jī)進(jìn)行交互的輸入輸出設(shè)備,例如終端窗口或控制臺(tái)。
TIME:進(jìn)程運(yùn)行過程中占用 CPU 的總時(shí)間(以分鐘和秒為單位),簡(jiǎn)單理解就是 CPU 運(yùn)行這個(gè)進(jìn)程消耗的時(shí)間。
CMD:?jiǎn)?dòng)進(jìn)程的命令的名稱
有時(shí)候當(dāng)我們執(zhí)行 ps
命令時(shí),TIME 顯示為 00:00:00
。這意味著該進(jìn)程尚未使用 CPU ,所以沒有 CPU 執(zhí)行的總時(shí)間。
對(duì)于上面的 bash
,就是這種情況,因?yàn)?bash
只是其他需要借助 bash
運(yùn)行的進(jìn)程的父進(jìn)程,所以它本身并沒有使用 CPU,也就沒有 CPU 執(zhí)行時(shí)間了。
上面的輸出實(shí)際上不是很有用,因?yàn)樗男畔⒉欢?。一般我們都是加上參?shù)的。
舉例說明
以下是一些常用的 ps
命令示例:
顯示所有正在運(yùn)行的進(jìn)程:
shell復(fù)制代碼ps -e
該命令等價(jià)于 ps -A
,這里的 e
和 A
分別是 every
和 all
的意思,所以等價(jià)。
顯示與終端無(wú)關(guān)的所有進(jìn)程:
我們打開一個(gè)新的終端,在新的終端中輸入 man ps
,接著我們回到原來的終端,輸入以下命令:
shell復(fù)制代碼ps -a
輸出顯示:
shell復(fù)制代碼 ? PID TTY ? ? ? ? ?TIME CMD ?23290 pts/1 ? ?00:00:00 man ?23301 pts/1 ? ?00:00:00 less ?23324 pts/0 ? ?00:00:00 ps
注意:
pst/1
表示一個(gè)偽終端(pseudo-terminal),同理pst/0
也是,0 和 1 只是終端的索引,當(dāng)開啟多個(gè)窗口時(shí),將遞增下去。
現(xiàn)在我們就可以在終端 0 看到終端 1 的進(jìn)程了(man 命令和 less 命令的進(jìn)程)
常用選項(xiàng)參數(shù)
以下是一些常用的 ps
命令選項(xiàng)參數(shù):
-e
:(every)顯示所有進(jìn)程,而不僅僅是當(dāng)前用戶的進(jìn)程-u
:(user)顯示面向用戶的進(jìn)程的詳細(xì)信息,如進(jìn)程所有者、CPU 使用率、內(nèi)存使用率等-f
:(full-format)以全格式的列表顯示進(jìn)程的信息,包括進(jìn)程之間的層級(jí)關(guān)系-p
:(pid)查找具有指定進(jìn)程 ID 的進(jìn)程-C
:(Command)查找具有指定命令名稱的進(jìn)程-aux
:以詳細(xì)格式顯示所有正在運(yùn)行的進(jìn)程,其中x
指的是在沒有控制終端的情況下列出進(jìn)程,這些顯示的主要是啟動(dòng)并運(yùn)行在后臺(tái)的進(jìn)程
例子
顯示所有進(jìn)程信息:
shell復(fù)制代碼ps -e
這將顯示所有進(jìn)程的信息,無(wú)論是當(dāng)前用戶的還是其他用戶的。
顯示進(jìn)程的詳細(xì)信息:
shell復(fù)制代碼ps -u
該命令將顯示進(jìn)程的詳細(xì)信息,包括進(jìn)程所有者、CPU 使用率、內(nèi)存使用率等。
可以看到輸出更多列了,每列的意思是這樣的:
USER:進(jìn)程所有者的用戶名
PID:進(jìn)程的唯一標(biāo)識(shí)符,即進(jìn)程 ID
%CPU:進(jìn)程使用的 CPU 資源的百分比
%MEM:進(jìn)程使用的內(nèi)存資源的百分比
VSZ:(Virtual Memory Size)進(jìn)程的虛擬內(nèi)存大?。ㄒ?KB 為單位)
RSS:(Resident Set Size)進(jìn)程占用的物理內(nèi)存大?。ㄒ?KB 為單位)
TTY:進(jìn)程所關(guān)聯(lián)的終端
STAT:進(jìn)程的狀態(tài)(例如,R 表示運(yùn)行,S 表示睡眠,Z 表示僵尸(Zombie)等)
START:進(jìn)程啟動(dòng)的時(shí)間
TIME:進(jìn)程運(yùn)行過程中占用 CPU 的總時(shí)間
COMMAND:?jiǎn)?dòng)進(jìn)程的命令名稱
顯示進(jìn)程之間的層級(jí)關(guān)系:
shell復(fù)制代碼ps -f
UID:進(jìn)程所有者的用戶 ID
PID:進(jìn)程的唯一 ID
PPID:(Parent Process ID)父進(jìn)程的標(biāo)識(shí)符
C:與
%CPU
的意思相同,進(jìn)程使用的 CPU 資源的百分比,或者說進(jìn)程的 CPU 使用率STIME:與
START
的意思相同,進(jìn)程啟動(dòng)的時(shí)間TTY:與進(jìn)程相關(guān)聯(lián)的終端
TIME:進(jìn)程運(yùn)行過程中占用 CPU 的總時(shí)間
CMD:?jiǎn)?dòng)進(jìn)程的命令名稱
我們可以通過 -ef
來查看更多的進(jìn)程的信息:
shell復(fù)制代碼ps -ef
查找具有指定進(jìn)程 ID 的進(jìn)程:
shell復(fù)制代碼ps -p PID
將 PID
替換為要查找的進(jìn)程的實(shí)際進(jìn)程 ID。這將顯示具有指定進(jìn)程 ID 的進(jìn)程的信息。
比如現(xiàn)在我知道了一個(gè)進(jìn)程的 PID 是 1333
,想看詳細(xì)信息,那么可以輸入:
shell復(fù)制代碼ps -p 1333 -f
查找具有指定命令名稱的進(jìn)程:
shell復(fù)制代碼ps -C command_name
將 command_name
替換為要查找的進(jìn)程的命令名稱。這將顯示具有指定命令名稱的進(jìn)程的信息。
ps 與其他命令一起使用
ps 可以通過管道符 |
和其他命令結(jié)合使用。
比如要將 ps
命令的輸出,將這些輸出通過管道交給 grep
命令進(jìn)行匹配,找到我們想要的進(jìn)程,起到一個(gè)過濾輸出顯示結(jié)果的作用,比如像找到屬于 root
用戶的進(jìn)程,就可以輸入:
shell復(fù)制代碼ps -ef | grep root
想找到 bash
命令的進(jìn)程,那么就可以輸入:
shell復(fù)制代碼ps -ef | grep bash
總結(jié)
ps
命令的使用,相信你通過這一分鐘的學(xué)習(xí)已經(jīng)掌握了,這是個(gè)很常用的命令,它有很多選項(xiàng),但實(shí)際上,我們平常一般只用到 ps -aux
或者 ps -ef
來查看相關(guān)的正在運(yùn)行的進(jìn)程信息,或者當(dāng)某些情況下想要找到某個(gè)進(jìn)程,定位某個(gè)進(jìn)程,就會(huì)使用 ps -ef | grep 進(jìn)程名或者命令名
來進(jìn)行匹配定位。