查詢進(jìn)程的命令:1、ps命令,能查看系統(tǒng)中所有運(yùn)行進(jìn)程的詳細(xì)信息,語法“ps aux”或“ps -le”;2、top命令,能實(shí)時監(jiān)聽進(jìn)程運(yùn)行狀態(tài),語法“top 選項(xiàng)”;3、pstree命令,能查看進(jìn)程樹,以樹形結(jié)構(gòu)顯示程序和進(jìn)程之間的關(guān)系。
本教程操作環(huán)境:centos 6系統(tǒng)、Dell G3電腦。
進(jìn)程是正在執(zhí)行的一個程序或命令,每個進(jìn)程都是一個運(yùn)行的實(shí)體,都有自己的地址空間,并占用一定的系統(tǒng)資源。
無論是 linux 系統(tǒng)管理員還是普通用戶,監(jiān)視系統(tǒng)進(jìn)程的運(yùn)行情況并適時終止一些失控的進(jìn)程,是每天的例行事務(wù)。
Linux 中雖然使用命令進(jìn)行進(jìn)程管理,但是進(jìn)程管理的主要目的是一樣的,即查看系統(tǒng)中運(yùn)行的程序和進(jìn)程、判斷服務(wù)器的健康狀態(tài)和強(qiáng)制中止不需要的進(jìn)程。
那么linux下查詢進(jìn)程命令是什么?下面本篇文章給大家分享一些linux查詢進(jìn)程的命令。
Linux ps命令:查看正在運(yùn)行的進(jìn)程
ps 命令是最常用的監(jiān)控進(jìn)程的命令,通過此命令可以查看系統(tǒng)中所有運(yùn)行進(jìn)程的詳細(xì)信息。
ps 命令的基本格式如下:
[root@localhost?~]#?ps?aux #查看系統(tǒng)中所有的進(jìn)程,使用?BS?操作系統(tǒng)格式 [root@localhost?~]#?ps?-le #查看系統(tǒng)中所有的進(jìn)程,使用?Linux?標(biāo)準(zhǔn)命令格式
選項(xiàng):
-
a:顯示一個終端的所有進(jìn)程,除會話引線外;
-
u:顯示進(jìn)程的歸屬用戶及內(nèi)存的使用情況;
-
x:顯示沒有控制終端的進(jìn)程;
-
-l:長格式顯示更加詳細(xì)的信息;
-
-e:顯示所有進(jìn)程;
可以看到,ps 命令有些與眾不同,它的部分選項(xiàng)不能加入”-“,比如命令”ps aux”,其中”aux”是選項(xiàng),但是前面不能帶“-”。
大家如果執(zhí)行 “man ps” 命令,則會發(fā)現(xiàn) ps 命令的幫助為了適應(yīng)不同的類 unix 系統(tǒng),可用格式非常多,不方便記憶。所以,我建議大家記憶幾個固定選項(xiàng)即可。比如:
-
“ps aux” 可以查看系統(tǒng)中所有的進(jìn)程;
-
“ps -le” 可以查看系統(tǒng)中所有的進(jìn)程,而且還能看到進(jìn)程的父進(jìn)程的 PID 和進(jìn)程優(yōu)先級;
-
“ps -l” 只能看到當(dāng)前 Shell 產(chǎn)生的進(jìn)程;
有這三個命令就足夠了,下面分別來查看。
【例 1】
[root@localhost?~]#?ps?aux
#查看系統(tǒng)中所有的進(jìn)程 USER?PID?%CPU?%MEM??VSZ??RSS???TTY?STAT?START?TIME?COMMAND root???1??0.0??0.2?2872?1416???????Ss???Jun04?0:02?/sbin/init root???2??0.0??0.0????0????0????????S???Jun04?0:00?[kthreadd] root???3??0.0??0.0????0????0????????S???Jun04?0:00?[migration/0] root???4??0.0??0.0????0????0????????S???Jun04?0:00?[ksoftirqd/0] …省略部分輸出…
表 1 中羅列出了以上輸出信息中各列的具體含義。
表頭 | 含義 |
---|---|
USER | 該進(jìn)程是由哪個用戶產(chǎn)生的。 |
PID | 進(jìn)程的 ID。 |
%CPU | 該進(jìn)程占用 CPU 資源的百分比,占用的百分比越高,進(jìn)程越耗費(fèi)資源。 |
%MEM | 該進(jìn)程占用物理內(nèi)存的百分比,占用的百分比越高,進(jìn)程越耗費(fèi)資源。 |
VSZ | 該進(jìn)程占用虛擬內(nèi)存的大小,單位為 KB。 |
RSS | 該進(jìn)程占用實(shí)際物理內(nèi)存的大小,單位為?KB。 |
TTY | 該進(jìn)程是在哪個終端運(yùn)行的。其中,tty1 ~ tty7 代表本地控制臺終端(可以通過 Alt+F1 ~ F7 快捷鍵切換不同的終端),tty1~tty6 是本地的字符界面終端,tty7 是圖形終端。pts/0 ~ 255 代表虛擬終端,一般是遠(yuǎn)程連接的終端,第一個遠(yuǎn)程連接占用 pts/0,第二個遠(yuǎn)程連接占用 pts/1,依次増長。 |
STAT | 進(jìn)程狀態(tài)。常見的狀態(tài)有以下幾種:
|
START | 該進(jìn)程的啟動時間。 |
TIME | 該進(jìn)程占用 CPU 的運(yùn)算時間,注意不是系統(tǒng)時間。 |
COMMAND | 產(chǎn)生此進(jìn)程的命令名。 |
【例 2】”ps aux”命令可以看到系統(tǒng)中所有的進(jìn)程,”ps -le”命令也能看到系統(tǒng)中所有的進(jìn)程。由于 “-l” 選項(xiàng)的作用,所以 “ps -le” 命令能夠看到更加詳細(xì)的信息,比如父進(jìn)程的 PID、優(yōu)先級等。但是這兩個命令的基本作用是一致的,掌握其中一個就足夠了。
[root@localhost?~]#?ps?-le F?S?UID?PID?PPID?C??PRI?Nl?ADDR??SZ?WCHAN?TTY??????TIME??CMD 4?S???0???1????0?0??80???0?-????718?-??????????00:00:02??init 1?S???0???2????0?0??80???0?-??????0?-??????????00:00:00??kthreadd 1?S???0???3????2?0?-40???-?-??????0?-??????????00:00:00??migration/0 1?S???0???4????2?0??80???0?-??????0?-??????????00:00:00??ksoflirqd/0 1?S???0???5????2?0?-40???-?-??????0?-??????????00:00:00??migration/0 …省略部分輸出…
表 2 羅列出以上輸出信息中各列的含義。
表頭 | 含義 |
---|---|
F | 進(jìn)程標(biāo)志,說明進(jìn)程的權(quán)限,常見的標(biāo)志有兩個:
|
S | 進(jìn)程狀態(tài)。具體的狀態(tài)和”psaux”命令中的 STAT 狀態(tài)一致; |
UID | 運(yùn)行此進(jìn)程的用戶的 ID; |
PID | 進(jìn)程的 ID; |
PPID | 父進(jìn)程的 ID; |
C | 該進(jìn)程的 CPU 使用率,單位是百分比; |
PRI | 進(jìn)程的優(yōu)先級,數(shù)值越小,該進(jìn)程的優(yōu)先級越高,越早被 CPU 執(zhí)行; |
NI | 進(jìn)程的優(yōu)先級,數(shù)值越小,該進(jìn)程越早被執(zhí)行; |
ADDR | 該進(jìn)程在內(nèi)存的哪個位置; |
SZ | 該進(jìn)程占用多大內(nèi)存; |
WCHAN | 該進(jìn)程是否運(yùn)行。”-“代表正在運(yùn)行; |
TTY | 該進(jìn)程由哪個終端產(chǎn)生; |
TIME | 該進(jìn)程占用 CPU 的運(yùn)算時間,注意不是系統(tǒng)時間; |
CMD | 產(chǎn)生此進(jìn)程的命令名; |
【例 3】如果不想看到所有的進(jìn)程,只想查看一下當(dāng)前登錄產(chǎn)生了哪些進(jìn)程,那只需使用 “ps -l” 命令就足夠了:
[root@localhost?~]#?ps?-l #查看當(dāng)前登錄產(chǎn)生的進(jìn)程 F?S?UID???PID??PPID?C?PRI?NI?ADDR?SZ?WCHAN?TTY???????TIME?CMD 4?S?0???18618?18614?0??80??0?-?1681??-?????pts/1?00:00:00?bash 4?R?0???18683?18618?4??80??0?-?1619??-?????pts/1?00:00:00?ps
可以看到,這次從 pts/1 虛擬終端登錄,只產(chǎn)生了兩個進(jìn)程:一個是登錄之后生成的 Shell,也就是 bash;另一個是正在執(zhí)行的 ps 命令。
Linux top命令:持續(xù)監(jiān)聽進(jìn)程運(yùn)行狀態(tài)
ps 命令可以一次性給出當(dāng)前系統(tǒng)中進(jìn)程狀態(tài),但使用此方式得到的信息缺乏時效性,并且,如果管理員需要實(shí)時監(jiān)控進(jìn)程運(yùn)行情況,就必須不停地執(zhí)行 ps 命令,這顯然是缺乏效率的。
為此,Linux 提供了 top 命令。top 命令可以動態(tài)地持續(xù)監(jiān)聽進(jìn)程地運(yùn)行狀態(tài),與此同時,該命令還提供了一個交互界面,用戶可以根據(jù)需要,人性化地定制自己的輸出,進(jìn)而更清楚地了進(jìn)程的運(yùn)行狀態(tài)。
top 命令的基本格式如下:
[root@localhost?~]#top?[選項(xiàng)]
選項(xiàng):
-
-d 秒數(shù):指定 top 命令每隔幾秒更新。默認(rèn)是 3 秒;
-
-b:使用批處理模式輸出。一般和”-n”選項(xiàng)合用,用于把 top 命令重定向到文件中;
-
-n 次數(shù):指定 top 命令執(zhí)行的次數(shù)。一般和”-“選項(xiàng)合用;
-
-p 進(jìn)程PID:僅查看指定 ID 的進(jìn)程;
-
-s:使 top 命令在安全模式中運(yùn)行,避免在交互模式中出現(xiàn)錯誤;
-
-u 用戶名:只監(jiān)聽某個用戶的進(jìn)程;
在 top 命令的顯示窗口中,還可以使用如下按鍵,進(jìn)行一下交互操作:
-
? 或 h:顯示交互模式的幫助;
-
P:按照 CPU 的使用率排序,默認(rèn)就是此選項(xiàng);
-
M:按照內(nèi)存的使用率排序;
-
N:按照 PID 排序;
-
T:按照 CPU 的累積運(yùn)算時間排序,也就是按照 TIME+ 項(xiàng)排序;
-
k:按照 PID 給予某個進(jìn)程一個信號。一般用于中止某個進(jìn)程,信號 9 是強(qiáng)制中止的信號;
-
r:按照 PID 給某個進(jìn)程重設(shè)優(yōu)先級(Nice)值;
-
q:退出 top 命令;
我們看看 top 命令的執(zhí)行結(jié)果,如下:
[root@localhost?~]#?top top?-?12:26:46?up?1?day,?13:32,?2?users,?load?average:?0.00,?0.00,?0.00 Tasks:?95?total,?1?running,?94?sleeping,?0?stopped,?0?zombie Cpu(s):?0.1%us,?0.1%sy,?0.0%ni,?99.7%id,?0.1%wa,?0.0%hi,?0.1%si,?0.0%st Mem:?625344k?total,?571504k?used,?53840k?free,?65800k?buffers Swap:?524280k?total,?0k?used,?524280k?free,?409280k?cached PID???USER?PR?NI?VIRT??RES??SHR?S?%CPU?%MEM???TIME+?COMMAND 19002?root?20??0?2656?1068??856?R??0.3??0.2?0:01.87?top 1?????root?20??0?2872?1416?1200?S??0.0??0.2?0:02.55?init 2?????root?20??0????0????0????0?S??0.0??0.0?0:00.03?kthreadd 3?????root?RT??0????0????0????0?S??0.0??0.0?0:00.00?migration/0 4?????root?20??0????0????0????0?S??0.0??0.0?0:00.15?ksoftirqd/0 5?????root?RT??0????0????0????0?S??0.0??0.0?0:00.00?migration/0 6?????root?RT??0????0????0????0?S??0.0??0.0?0:10.01?watchdog/0 7?????root?20??0????0????0????0?S??0.0??0.0?0:05.01?events/0 8?????root?20??0????0????0????0?S??0.0??0.0?0:00.00?cgroup 9?????root?20??0????0????0????0?S??0.0??0.0?0:00.00?khelper 10????root?20??0????0????0????0?S??0.0??0.0?0:00.00?netns 11????root?20??0????0????0????0?S??0.0??0.0?0:00.00?async/mgr 12????root?20??0????0????0????0?S??0.0??0.0?0:00.00?pm 13????root?20??0????0????0????0?S??0.0??0.0?0:01.70?sync_supers 14????root?20??0????0????0????0?S??0.0??0.0?0:00.63?bdi-default 15????root?20??0????0????0????0?S??0.0??0.0?0:00.00?kintegrityd/0 16????root?20??0????0????0????0?S??0.0??0.0?0:02.52?kblockd/0 17????root?20??0????0????0????0?S??0.0??0.0?0:00.00?kacpid 18????root?20??0????0????0????0?S??0.0??0.0?0:00.00?kacpi_notify
我們解釋一下命令的輸出。top 命令的輸出內(nèi)容是動態(tài)的,默認(rèn)每隔 3 秒刷新一次。命令的輸出主要分為兩部分:
-
第一部分是前五行,顯示的是整個系統(tǒng)的資源使用狀況,我們就是通過這些輸出來判斷服務(wù)器的資源使用狀態(tài)的;
-
第二部分從第六行開始,顯示的是系統(tǒng)中進(jìn)程的信息;
Linux pstree命令:查看進(jìn)程樹
pstree 命令是以樹形結(jié)構(gòu)顯示程序和進(jìn)程之間的關(guān)系,此命令的基本格式如下:
[root@localhost?~]#?pstree?[選項(xiàng)]?[PID或用戶名]
表 1 羅列出了 pstree 命令常用選項(xiàng)以及各自的含義。
選項(xiàng) | 含義 |
---|---|
-a | 顯示啟動每個進(jìn)程對應(yīng)的完整指令,包括啟動進(jìn)程的路徑、參數(shù)等。 |
-c | 不使用精簡法顯示進(jìn)程信息,即顯示的進(jìn)程中包含子進(jìn)程和父進(jìn)程。 |
-n | 根據(jù)進(jìn)程 PID 號來排序輸出,默認(rèn)是以程序名排序輸出的。 |
-p | 顯示進(jìn)程的 PID。 |
-u | 顯示進(jìn)程對應(yīng)的用戶名稱。 |
需要注意的是,在使用 pstree 命令時,如果不指定進(jìn)程的 PID 號,也不指定用戶名稱,則會以 init 進(jìn)程為根進(jìn)程,顯示系統(tǒng)中所有程序和進(jìn)程的信息;反之,若指定 PID 號或用戶名,則將以 PID 或指定命令為根進(jìn)程,顯示 PID 或用戶對應(yīng)的所有程序和進(jìn)程。
init 進(jìn)程是系統(tǒng)啟動的第一個進(jìn)程,進(jìn)程的 PID 是 1,也是系統(tǒng)中所有進(jìn)程的父進(jìn)程。
【例 1】
[root@1ocalhost?~]#?pstree init──┬──abrc-dump-oopa ├──abrtd ├──acpid ...省略部分輸出... ├──rayslogd───3*[{rsyslogrd}] #有3個rsyslogd進(jìn)程存在 ├──sshd───sshd───bash───pstree #Pstree命令進(jìn)程是在遠(yuǎn)程連接中被執(zhí)行的 ├──udevd───2*[udevd] └──xinecd
【例 2】如果想知道某個用戶都啟動了哪些進(jìn)程,使用 pstree 命令可以很容易實(shí)現(xiàn),以 mysql 用戶為例:
[root@1ocalhost?~]#?pstree?mysql mysqid---6*[{mysqid}]
此輸出結(jié)果顯示了 mysql 用戶對應(yīng)的進(jìn)程為 mysqid,并且 mysqid 進(jìn)程擁有 5 個子進(jìn)程(外加 1 個父進(jìn)程,共計(jì) 6 個進(jìn)程)。
Linux lsof命令:列出進(jìn)程調(diào)用或打開的文件信息
我們知道,通過 ps 命令可以查詢到系統(tǒng)中所有的進(jìn)程,那么,是否可以進(jìn)一步知道這個進(jìn)程到底在調(diào)用哪些文件嗎?當(dāng)然可以,使用 lsof 命令即可。
lsof 命令,“l(fā)ist opened files”的縮寫,直譯過來,就是列舉系統(tǒng)中已經(jīng)被打開的文件。通過 lsof 命令,我們就可以根據(jù)文件找到對應(yīng)的進(jìn)程信息,也可以根據(jù)進(jìn)程信息找到進(jìn)程打開的文件。
lsof 命令的基本格式如下:
[root@localhost?~]#?lsof?[選項(xiàng)]
此命令常用的選項(xiàng)及功能,如表 1 所示。
選項(xiàng) | 功能 |
---|---|
-c 字符串 | 只列出以字符串開頭的進(jìn)程打開的文件。 |
+d 目錄名 | 列出某個目錄中所有被進(jìn)程調(diào)用的文件。 |
-u 用戶名 | 只列出某個用戶的進(jìn)程打開的文件。 |
-p pid | 列出某個 PID 進(jìn)程打開的文件。 |
【例 1】
[root@localhost?~]#?lsof?|?more #查詢系統(tǒng)中所有進(jìn)程調(diào)用的文件 COMMAND?PID??USER??FD????TYPE??DEVICE??SIZE/OFF??NODE??NAME init???????????????1??????root????cwd??DIR????8,3???????4096????????2???????????/ init???????????????1??????root????rtd????DIR????8,3???????4096????????2???????????/ init???????????????1??????root????txt?????REG???8,3???????145180????130874?/sbin/init init???????????????1??????root????mem?REG???8,3???????142472????665291?/lib/ld-2.12.so init???????????????1??????root????mem?REG???8,3???????58704??????655087?/lib/libnss_files-2.12.so …省略部分輸出…
這個命令的輸出非常多。它會按照 PID,從 1 號進(jìn)程開始列出系統(tǒng)中所有的進(jìn)程正在調(diào)用的文件名。
【例 2】
[root@localhost?~]#?lsof?/sbin/init #查詢某個文件被哪個進(jìn)程調(diào)用 COMMAND?PID?USER??FD??TYPE??DEVICE??SIZE/OFF??NODE????NAME init???????????????1?????root????txt??REG???8,3??????145180?????130874???/sbin/init
lsof 命令也可以反過來查詢某個文件被哪個進(jìn)程調(diào)用。這個例子就查詢到 /sbin/init 文件是被 init 進(jìn)程調(diào)用的。
相關(guān)推薦:《Linux視頻教程》