1. 程式人生 > >Linux下10個ps命令的基本例子

Linux下10個ps命令的基本例子

Linux ps命令

在Linux下ps命令是用於檢視系統上執行的程序的最基本的命令之一。它提供了當前程序的同時,如使用者ID,CPU使用率,記憶體使用率,命令名稱等,它不顯示實時資料,如top或htop命令的詳細資訊。但是,即使是功能和輸出簡單,但它仍然是一個必用的過程管理/監控工具,每一個Linux新手應該知道這一點,好好學習。在這篇文章中,我們將使用ps命令以不同的方式來檢視程序、篩選和排序它們,以加強基礎部分。

語法注意:

ps命令帶有2種不一樣的風格,分別是BSD和UNIX。新使用者經常會混淆和錯誤地解釋這兩種風格。所以要弄清楚他們,繼續操作之前這裡是一些基本的資訊。

注意:"ps aux"和"ps -aux"不相同。例如"-u"用來顯示該使用者的程序。但是"u"則是顯示詳細的資訊。

BSD風格:在BSD風格的語法選項前不帶連字元。

  1. ps aux 

UNIX/LINUX的風格:在linux風格的語法選項前面有一個破折號如常。…

  1. ps -ef 

混合使用兩種Linux系統上的語法風格是好事兒。例如“ps ax -f”。但在這篇文章中,我們將主要集中在UNIX風格的語法。

如何使用ps命令呢?

1、顯示所有程序:

下面的命令將列出所有的程序:

  1. $ ps ax 
  2. $ ps -ef 

加上管道輸出給less,來滾動顯示

"u"或者"-f"引數來顯示所有程序的詳細資訊

  1. $ ps aux 
  2. $ ps -ef -f 

注意:為什麼使用者列不顯示我的使用者名稱,但顯示其他使用者,如root、www等,對於所有的使用者名稱(包括你)如果長度大於8個字元,然後ps將只顯示UID,而不是使用者名稱。

2、根據使用者顯示程序:

由程序的所屬使用者使用“-u”選項後跟使用者名稱來顯示。多個使用者名稱可以提供以逗號分隔。

  1. $ ps -f -u www-data 
  2. UID        PID  PPID  C STIME TTY          TIME CMD 
  3. www-data  1329  1328  0 09:32 ?        00:00:00 nginx: worker process 
  4. www-data  1330  1328  0 09:32 ?        00:00:00 nginx: worker process 
  5. www-data  1332  1328  0 09:32 ?        00:00:00 nginx: worker process 
  6. www-data  1377  1372  0 09:32 ?        00:00:00 php-fpm: pool a.localhost                                                
  7. www-data  1378  1372  0 09:32 ?        00:00:00 php-fpm: pool a.localhost                                                
  8. www-data  4524  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start 
  9. www-data  4527  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start 
  10. www-data  4528  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start 

3、通過名字和程序ID顯示程序:

通過名字或命令搜尋程序,使用“-C”選項後面加搜尋詞。

  1. $ ps -C apache2 
  2.   PID TTY          TIME CMD 
  3.  2359 ?        00:00:00 apache2 
  4.  4524 ?        00:00:00 apache2 
  5.  4525 ?        00:00:00 apache2 
  6. ... 

4、根據CPU或者記憶體進行排序:

系管理員經常希望找出那些消耗大量記憶體或CPU的程序。排序選項將基於特定的欄位或引數讓程序列表進行排序。

“–sort”選項由逗號分隔的多個欄位可以用指定。此外,該欄位可以帶有字首“-”或“”符號,表示降序或升序分別排序。通過程序列表進行排序有很多引數,你可以檢查手冊頁的完整列表。

  1. $ ps aux --sort=-pcpu,+pmem 

顯示前5個消耗了大部分的CPU程序。

  1. $ ps aux --sort=-pcpu | head -5 
  2. USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
  3. root         1  2.6  0.7  51396  7644 ?        Ss   02:02   0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 
  4. root      1249  2.6  3.0 355800 30896 tty1     Rsl+ 02:02   0:02 /usr/bin/X -background none :0 vt01 -nolisten tcp 
  5. root       508  2.4  1.6 248488 16776 ?        Ss   02:02   0:03 /usr/bin/python /usr/sbin/firewalld --nofork 
  6. silver    1525  2.1  2.3 448568 24392 ?        S    02:03   0:01 /usr/bin/python /usr/share/system-config-printer/applet.py 

5、用樹的風格顯示程序的層次關係:

許多程序實際上是一些父程序分的分支,知道這父子程序關係往往是有用的。在'–forest'選項將建立ASCII藝術風格層次的樹檢視。

下面的命令將搜尋程序名字為Apache2,形成一個樹結構來顯示詳細的資訊。

  1. $ ps -f --forest -C apache2 
  2. UID        PID  PPID  C STIME TTY          TIME CMD 
  3. root      2359     1  0 09:32 ?        00:00:00 /usr/sbin/apache2 -k start 
  4. www-data  4524  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start 
  5. www-data  4525  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start 
  6. www-data  4526  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start 
  7. www-data  4527  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start 
  8. www-data  4528  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start 

儘量不要使用任何的排序和樹風格一起展示,因為他們使用了不同的順序。

6、顯示一個父程序的子程序:

這裡有一個例子顯示所有apache程序的分支

  1. $ ps -o pid,uname,comm -C apache2 
  2.   PID USER     COMMAND 
  3.  2359 root     apache2 
  4.  4524 www-data apache2 
  5.  4525 www-data apache2 
  6.  4526 www-data apache2 
  7.  4527 www-data apache2 
  8.  4528 www-data apache2 
  9. [term] 
  10. The first process that is owned by root is the main apache2 process and all other apache2 processes have been forked out of this main process. The next command lists all child apache2 processes using the pid of the main apache2 process 
  11. [term] 
  12. $ ps --ppid 2359 
  13. PID TTY       TIME CMD 
  14. 4524 ?        00:00:00 apache2 
  15. 4525 ?        00:00:00 apache2 
  16. 4526 ?        00:00:00 apache2 
  17. 4527 ?        00:00:00 apache2 
  18. 4528 ?        00:00:00 apache2 

7、顯示一個程序的執行緒:

“-L”選項將顯示程序的執行緒。它可以用來顯示特定程序的所有執行緒或者所有程序。

下面的命令將顯示所有id為3150的程序所擁有的執行緒。

  1. $ ps -p 3150 -L 

8、改變要顯示的列:

ps命令可以配置為只顯示選中的列表。為了顯示完整列表可以檢視手冊。

下面的命令只顯示PID,使用者名稱,CPU,記憶體和命令的列。

  1. $ ps -e -o pid,uname,pcpu,pmem,comm 

可以重新命名列標籤,相當的靈活。

  1. $ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm 
  2. PID USERNAME CPU_USAGE %MEM COMMAND 
  3. 1 root           0.0  0.0 init 
  4.  2 root           0.0  0.0 kthreadd 
  5. 3 root           0.0  0.0 ksoftirqd/0 
  6. 4 root           0.0  0.0 kworker/0:0 
  7. 5 root           0.0  0.0 kworker/0:0H 
  8. 7 root           0.0  0.0 migration/0 
  9. 8 root           0.0  0.0 rcu_bh 
  10. 9 root           0.0  0.0 rcuob/0 
  11. 10 root           0.0  0.0 rcuob/1 

9、顯示程序執行的時間:

表示程序的執行時間。對於執行的時間,列預設情況下是不顯示的,可以使用“-O”選項檢視。

  1. $ ps -e -o pid,comm,etime 

10、把ps命令變成一個實時檢視器:

像往常一樣,watch命令可以用來實時捕捉ps顯示程序。簡單的例子如下:

  1. $ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15' 

輸出在桌面上像這樣:

  1. Every 1.0s: ps -e -o pid,uname,cmd,pmem,pcpu --...  Sun Dec  1 18:16:08 2013 
  2. PID USER     CMD                         %MEM %CPU 
  3. 3800 1000     /opt/google/chrome/chrome -  4.6  1.4 
  4. 7492 1000     /opt/google/chrome/chrome -  2.7  1.4 
  5. 3150 1000     /opt/google/chrome/chrome    2.7  2.5 
  6. 3824 1000     /opt/google/chrome/chrome -  2.6  0.6 
  7. 3936 1000     /opt/google/chrome/chrome -  2.4  1.6 
  8. 2936 1000     /usr/bin/plasma-desktop      2.3  0.2 
  9. 9666 1000     /opt/google/chrome/chrome -  2.1  0.8 
  10. 3842 1000     /opt/google/chrome/chrome -  2.1  0.8 
  11. 4739 1000     /opt/google/chrome/chrome -  1.8  1.0 
  12. 3930 1000     /opt/google/chrome/chrome -  1.7  1.0 
  13. 3911 1000     /opt/google/chrome/chrome -  1.6  0.6 
  14. 3645 1000     /opt/google/chrome/chrome -  1.5  0.4 
  15. 3677 1000     /opt/google/chrome/chrome -  1.5  0.4 
  16. 3639 1000     /opt/google/chrome/chrome -  1.4  0.4 

輸出將被重新整理,每1秒重新整理統計資料。不過不要以為這是類似上面。

你會注意到在相比情況下top/htop命令的輸出變化會更加頻繁。

這是因為上面輸出各種各樣的值,CPU使用率和記憶體使用情況的組合。但上述ps命令排序顯示的更簡單,採取的是一個時間1列(如學校數學).所以它不會像top那樣快速更新。