ps命令的10個例子
Linux ps 命令
linux的ps命令是一個檢視系統執行的程式的一個最基礎的工具。它提供了一個當前程式的快照,還帶有一些具體的資訊,比如使用者id,cpu使用率,記憶體使用,命令名等,它不會像top或者htop一樣實時顯示資料。雖然它在功能和輸出上更加簡單,但它仍然是每個linux新手需要了解和學好的必要程式管理/檢測工具。
在本篇中,我們會學習ps命令基本的用法:查詢、過濾,以不同的方式排序。
語法說明
ps命令有兩種不同風格的語法規則:BSD風格和UNIX風格。Linux新手經常感到困惑並會誤解這兩種風格,所以在繼續下一步之前,我們來弄清楚一些基本的資訊。
注意: "ps aux"不等同於"ps -aux"。比如"-u"用於顯示使用者的程式,但是"u"意味著顯示具體資訊。
BSD 形式 - BSD形式的語法的選項前沒有破折號,如:
ps aux
UNIX/LINUX 形式 - linux形式的語法的選項前有破折號,如:
ps -ef
在linux系統上混合這兩種語法是可以的。比如 "ps ax -f"。但是本章中我們主要討論UNIX形式語法。
如何使用ps命令
1. 顯示所有程式
下面的命令可以顯示所有程式的列表。
$ ps ax $ ps -ef
透過管道輸出到"less"可以分頁。
使用"u"或者"-f"選項可以顯示程式的具體資訊。
$ ps aux $ ps -ef -f
為什麼USER列顯示的不是我的使用者名稱,但是其他的像root,www-data等卻顯示? 對於所有的使用者(包括你們的),如果長度大於8個字元,那麼ps只會顯示你的UID而不是使用者名稱。
2. 顯示使用者程式
使用"-u"選項後跟使用者名稱來過濾所屬使用者的程式。多個使用者名稱可以用逗號分隔。
$ ps -f -u www-data UID PID PPID C STIME TTY TIME CMD www-data 1329 1328 0 09:32 ? 00:00:00 nginx: worker process www-data 1330 1328 0 09:32 ? 00:00:00 nginx: worker process www-data 1332 1328 0 09:32 ? 00:00:00 nginx: worker process www-data 1377 1372 0 09:32 ? 00:00:00 php-fpm: pool a.localhost www-data 1378 1372 0 09:32 ? 00:00:00 php-fpm: pool a.localhost www-data 4524 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start www-data 4527 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start www-data 4528 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start
3. 透過名字或者程式id顯示程式
透過"-C"選項後面加上名字或者命令來搜尋程式。
$ ps -C apache2 PID TTY TIME CMD 2359 ? 00:00:00 apache2 4524 ? 00:00:00 apache2 4525 ? 00:00:00 apache2 ...
要透過程式id顯示程式,就使用"-p"選項,並且還可以透過逗號分隔來指定多個程式id。
$ ps -f -p 3150,7298,6544
"-C"必須提供精確的程式名,並且它並不能透過部分名字或者萬用字元查詢。為了更靈活地搜尋程式列表,通常使用grep命令。
$ ps -ef | grep apache
4. 透過cpu或者記憶體使用排序程式
系統管理員通常想要找出那些消耗最多記憶體或者CPU的程式。排序選項會基於特定的欄位或者引數來排序程式列表。
可以用'--sort'指定多個欄位,並用逗號分割。除此之外,欄位前面還可以跟上'-'或者'+'的字首來相應地表示遞減和遞增排序。這裡有很多的用於排序的選項,透過man頁來獲取完整的列表。
$ ps aux --sort=-pcpu,+pmem
顯示前5名最耗cpu的程式。
$ ps aux --sort=-pcpu | head -5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 2.6 0.7 51396 7644 ? Ss 02:02 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 root 1249 2.6 3.0 355800 30896 tty1 Rsl+ 02:02 0:02 /usr/bin/X -background none :0 vt01 -nolisten tcp root 508 2.4 1.6 248488 16776 ? Ss 02:02 0:03 /usr/bin/python /usr/sbin/firewalld --nofork silver 1525 2.1 2.3 448568 24392 ? S 02:03 0:01 /usr/bin/python /usr/share/system-config-printer/applet.py
5. 以樹的形式顯示程式層級
許多程式實際上是從同一個父程式fork出來的,瞭解父子關係通常是很有用的。"--forest" 選項會構造一個ascii藝術形式的程式層級檢視。
下面的命令會用apache2的程式名來搜尋並構造一個樹來顯示具體資訊。
$ ps -f --forest -C apache2 UID PID PPID C STIME TTY TIME CMD root 2359 1 0 09:32 ? 00:00:00 /usr/sbin/apache2 -k start www-data 4524 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start www-data 4525 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start www-data 4526 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start www-data 4527 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start www-data 4528 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
不要在排序中使用樹狀顯示,因為兩者都會以不同方式影響顯示的順序。
6. 顯示父程式的子程式
下面一個是找出所有從apache程式fork出來的程式的例子。
$ ps -o pid,uname,comm -C apache2 PID USER COMMAND 2359 root apache2 4524 www-data apache2 4525 www-data apache2 4526 www-data apache2 4527 www-data apache2 4528 www-data apache2
第一個屬於root的程式是apache2的主程式,其他的apache程式都是從主程式fork出來的。下面的命令使用apache2主程式的pid列出了所有的apache2的子程式。
$ ps --ppid 2359 PID TTY TIME CMD 4524 ? 00:00:00 apache2 4525 ? 00:00:00 apache2 4526 ? 00:00:00 apache2 4527 ? 00:00:00 apache2 4528 ? 00:00:00 apache2
7. 顯示程式的執行緒
"-L"選項會隨著程式一起顯示執行緒。它可用於顯示所有指定程式或者所有程式的執行緒。
下面的命令會顯示程式id為3150的程式的所有執行緒。
$ ps -p 3150 -L
8. 改變顯示的列
ps命令可以被配置用來只顯示被選中的列。很多列可以被用來顯示,完整的列表可以檢視man頁。
下面的命令會只顯示pid、使用者名稱、cpu、記憶體、命令列。
$ ps -e -o pid,uname,pcpu,pmem,comm
同樣可以重新命名列的名字。
$ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm PID USERNAME CPU_USAGE %MEM COMMAND 1 root 0.0 0.0 init 2 root 0.0 0.0 kthreadd 3 root 0.0 0.0 ksoftirqd/0 4 root 0.0 0.0 kworker/0:0 5 root 0.0 0.0 kworker/0:0H 7 root 0.0 0.0 migration/0 8 root 0.0 0.0 rcu_bh 9 root 0.0 0.0 rcuob/0 10 root 0.0 0.0 rcuob/1
非常靈活。
9. 顯示程式執行的時間
執行的時間指的是,程式已經執行的時間。執行時間的列並沒有預設顯示,需要使用-o選項帶入。
$ ps -e -o pid,comm,etime
10. 將ps轉換為實時程式檢視器
通常上,watch命令可將ps命令變成實時程式檢視器。像這個簡單的命令
$ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'
我桌面上的輸出如下。
Every 1.0s: ps -e -o pid,uname,cmd,pmem,pcpu --... Sun Dec 1 18:16:08 2013 PID USER CMD %MEM %CPU 3800 1000 /opt/google/chrome/chrome - 4.6 1.4 7492 1000 /opt/google/chrome/chrome - 2.7 1.4 3150 1000 /opt/google/chrome/chrome 2.7 2.5 3824 1000 /opt/google/chrome/chrome - 2.6 0.6 3936 1000 /opt/google/chrome/chrome - 2.4 1.6 2936 1000 /usr/bin/plasma-desktop 2.3 0.2 9666 1000 /opt/google/chrome/chrome - 2.1 0.8 3842 1000 /opt/google/chrome/chrome - 2.1 0.8 4739 1000 /opt/google/chrome/chrome - 1.8 1.0 3930 1000 /opt/google/chrome/chrome - 1.7 1.0 3911 1000 /opt/google/chrome/chrome - 1.6 0.6 3645 1000 /opt/google/chrome/chrome - 1.5 0.4 3677 1000 /opt/google/chrome/chrome - 1.5 0.4 3639 1000 /opt/google/chrome/chrome - 1.4 0.4
輸出會每秒重新整理狀態,但是這其實很top不同。你會發現top/htop命令的輸出相比上面的ps命令重新整理得更頻繁。
這是因為top輸出是結合了cup使用值和記憶體使用值後的排序值。但是上面的ps命令是一個更簡單的行為的排序,每次獲取一列(像學校的數學),因此它不會像top那樣快速更新。
相關文章
- 14 個 grep 命令的例子
- 10 個例子教你學會 ncat (nc) 命令
- Linux 中 10 個有用的命令列補全例子Linux命令列
- 14 個 Linux grep 命令的例子Linux
- 檢測Linux記憶體使用情況的free命令的10個例子Linux記憶體
- Linux 中 grep 命令的 12 個實踐例子Linux
- 6 個例子讓初學者掌握 free 命令
- 偶想做了一個jms例子,找到了jboss的書上的例子執行在了eclipse中了Eclipse
- 為初學者介紹的 Linux tee 命令(6 個例子)Linux
- 6個關於dd命令備份Linux系統的例子Linux
- 每天一個 Linux 命令(41): ps 命令Linux
- 每天一個linux命令(41):ps命令Linux
- 管道命令grep , egrep的使用例子 -v
- 一個使用getopt()函式獲取命令列引數的例子(轉)函式命令列
- Linux的10個風險命令Linux
- 一個jquery的小例子jQuery
- solaris 10_相關命令_ps_pgrep_pkill_pstop_pstart
- Eclipse匯入NDK例子工程Eclipse
- 管理Websphere的10個有用命令Web
- 透過8個小例子帶你掌握Linux Head命令!Linux
- 10個例子帶你瞭解機器學習中的線性代數機器學習
- Linux中10個有用的命令列補齊命令Linux命令列
- 學習一個 Linux 命令:pstreeLinux
- 行列轉換的一個例子
- 一個可逆加密的例子 (轉)加密
- ps命令
- Linux的10個最危險命令Linux
- 必須掌握的10個Linux命令!Linux
- 10個很有用的高階Git命令Git
- 10 個 Linux 中的 passwd 命令示例Linux
- Linux的10個最危險的命令Linux
- Linux命令--ps命令Linux
- 一個複雜的json例子JSON
- 一個小例子搞懂redux的套路Redux
- 擼一個簡單的MVVM例子MVVM
- 第一個JavaScript的例子學習JavaScript
- 繫結變數的一個例子變數
- 分散式死鎖的一個例子分散式