linux命令學習之:ps


  Linux中的ps命令是Process Status的縮寫。ps命令用於報告當前系統的進程狀態,列出系統中當前運行的那些進程。可以搭配kill指令隨時中斷、刪除不必要的程序。

  要對進程進行監測和控制,首先必須要了解當前進程的情況,而 ps 命令就是最基本同時也是非常強大的進程查看命令。使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等。總之大部分信息都是可以通過執行該命令得到的。

  ps 為我們提供了進程的一次性的查看,也就是是當前那些進程的快照,它所提供的查看結果並不動態連續的;如果想對進程時間監控,應該用 top 工具。

  kill 命令用於殺死進程。

linux上進程有5種狀態: 

1. 運行(正在運行或在運行隊列中等待) 

2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號) 

3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生) 

4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用后釋放) 

5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行運行) 

ps工具標識進程的5種狀態碼(S): 

D 不可中斷 uninterruptible sleep (usually IO) 

R 運行 runnable (on run queue) 

S 中斷 sleeping 

T 停止 traced or stopped 

Z 僵死 a defunct (”zombie”) process

語法:

  ps(選項)

選項說明:

-a:顯示所有終端機下執行的程序,除了階段作業領導者之外。

a:顯示現行終端機下的所有程序,包括其他用戶的程序。

-A:顯示所有程序。

-c:顯示CLS和PRI欄位。

c:列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,選項或常駐服務的標示。

-C<指令名稱>:指定執行指令的名稱,並列出該指令的程序的狀況。

-d:顯示所有程序,但不包括階段作業領導者的程序。

-e:此選項的效果和指定"A"選項相同。

e:列出程序時,顯示每個程序所使用的環境變量。

-f:顯示UID,PPIP,C與STIME欄位。

f:用ASCII字符顯示樹狀結構,表達程序間的相互關系。

-g<群組名稱>:此選項的效果和指定"-G"選項相同,當亦能使用階段作業領導者的名稱來指定。

g:顯示現行終端機下的所有程序,包括群組領導者的程序。

-G<群組識別碼>:列出屬於該群組的程序的狀況,也可使用群組名稱來指定。

h:不顯示標題列。

-H:顯示樹狀結構,表示程序間的相互關系。

-j或j:采用工作控制的格式顯示程序狀況。

-l或l:采用詳細的格式來顯示程序狀況。

L:列出欄位的相關信息。

-m或m:顯示所USER和WCHAN欄位。

-N:顯示所有的程序,除了執行ps指令終端機下的程序之外。

-p<程序識別碼>:指定程序識別碼,並列出該程序的狀況。

p<程序識別碼>:此選項的效果和指定"-p"選項相同,只在列表格式方面稍有差異。

r:只列出現行終端機正在執行中的程序。

-s<階段作業>:指定階段作業的程序識別碼,並列出隸屬該階段作業的程序的狀況。

s:采用程序信號的格式顯示程序狀況。

S:列出程序時,包括已中斷的子程序資料。

-t<終端機編號>:指定終端機編號,並列出屬於該終端機的程序的狀況。

t<終端機編號>:此選項的效果和指定"-t"選項相同,只在列表格式方面稍有差異。

-T:顯示現行終端機下的所有程序。

-u<用戶識別碼>:此選項的效果和指定"-U"選項相同。

u:以用戶為主的格式來顯示程序狀況。

-U<用戶識別碼>:列出屬於該用戶的程序的狀況,也可使用用戶名稱來指定。

U<用戶名稱>:列出屬於該用戶的程序的狀況。

v:采用虛擬內存的格式顯示程序狀況。

-V或V:顯示版本信息。

-w或w:采用寬闊的格式來顯示程序狀況。 

x:顯示所有程序,不以終端機來區分。

X:采用舊式的Linux i386登陸格式顯示程序狀況。

-y:配合選項"-l"使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位 。

-<程序識別碼>:此選項的效果和指定"p"選項相同。

--cols<每列字符數>:設置每列的最大字符數。

--columns<每列字符數>:此選項的效果和指定"--cols"選項相同。

--cumulative:此選項的效果和指定"S"選項相同。

--deselect:此選項的效果和指定"-N"選項相同。

--forest:此選項的效果和指定"f"選項相同。

--headers:重復顯示標題列。

--help:在線幫助。

--info:顯示排錯信息。

--lines<顯示列數>:設置顯示畫面的列數。

--no-headers:此選項的效果和指定"h"選項相同,只在列表格式方面稍有差異。

--group<群組名稱>:此選項的效果和指定"-G"選項相同。

--Group<群組識別碼>:此選項的效果和指定"-G"選項相同。

--pid<程序識別碼>:此選項的效果和指定"-p"選項相同。

--rows<顯示列數>:此選項的效果和指定"--lines"選項相同。

--sid<階段作業>:此選項的效果和指定"-s"選項相同。

--tty<終端機編號>:此選項的效果和指定"-t"選項相同。

--user<用戶名稱>:此選項的效果和指定"-U"選項相同。

--User<用戶識別碼>:此選項的效果和指定"-U"選項相同。

--version:此選項的效果和指定"-V"選項相同。

--widty<每列字符數>:此選項的效果和指定"-cols"選項相同。

常用示例:

1、顯示所有進程信息

  命令:ps -A

[root@CTU1000094955 ~]# ps -A
   PID TTY          TIME CMD
     1 ?        00:20:52 systemd
     2 ?        00:00:12 kthreadd
     3 ?        00:00:00 ksoftirqd/0
     5 ?        00:00:00 kworker/0:0H
     7 ?        00:00:27 migration/0
     8 ?        00:00:00 rcu_bh
     9 ?        00:00:00 rcuob/0
    ... ...#中間省略了部分
 59785 ?        00:00:00 sshd
 59795 pts/0    00:00:00 bash
 60283 ?        00:00:00 kworker/1:2
 60948 ?        00:00:00 kworker/2:2
 62872 ?        00:00:00 kworker/0:1
 64181 ?        00:00:01 setroubleshootd
 64187 ?        00:00:00 sleep
 64258 pts/0    00:00:00 ps
 64259 ?        00:00:00 kworker/3:0
 68591 ?        00:24:13 java
 85204 ?        00:10:33 accounts-daemon
103598 ?        00:00:00 mysqld_safe
103762 ?        00:20:03 mysqld
120139 ?        00:00:14 kworker/u256:0
126191 ?        01:53:16 polkitd

2、顯示指定用戶信息

  命令:ps -u root

[root@CTU1000094955 ~]# ps -u root
   PID TTY          TIME CMD
     1 ?        00:20:52 systemd
     2 ?        00:00:12 kthreadd
     3 ?        00:00:00 ksoftirqd/0
     5 ?        00:00:00 kworker/0:0H
     7 ?        00:00:27 migration/0
     8 ?        00:00:00 rcu_bh
     9 ?        00:00:00 rcuob/0
    10 ?        00:00:00 rcuob/1
    ... ... 中間省略了部分
 59785 ?        00:00:00 sshd
 59795 pts/0    00:00:00 bash
 65450 ?        00:00:00 sleep
 65521 pts/0    00:00:00 ps
 68591 ?        00:24:15 java
 85204 ?        00:10:33 accounts-daemon
103598 ?        00:00:00 mysqld_safe
120139 ?        00:00:14 kworker/u256:0

3、顯示所有進程信息,連同命令行

  命令:ps -ef

[root@CTU1000094955 ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 Oct04 ?        00:20:52 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2      0  0 Oct04 ?        00:00:12 [kthreadd]
root          3      2  0 Oct04 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 Oct04 ?        00:00:00 [kworker/0:0H]
root          7      2  0 Oct04 ?        00:00:27 [migration/0]
... ... 中間省略了部分
root      59785  25566  0 10:52 ?        00:00:00 sshd: root@pts/0
root      59795  59785  0 10:52 pts/0    00:00:00 -bash
root      65870    861  0 11:15 ?        00:00:00 sleep 60
root      65915  59795  0 11:16 pts/0    00:00:00 ps -ef
root      68591      1  0 Nov16 ?        00:24:15 /biz/maas/cmdp/jre/bin/java -Djava.util.logging.config.file=/biz/maas/cmdp/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apa
root      85204      1  0 Oct30 ?        00:10:33 /usr/libexec/accounts-daemon
root     103598      1  0 Oct30 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/CTU1000094955.pid
mysql    103762 103598  0 Oct30 ?        00:20:06 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mariadb/maria
root     120139      2  0 Nov11 ?        00:00:14 [kworker/u256:0]
polkitd  126191      1  0 Oct10 ?        01:53:17 /usr/lib/polkit-1/polkitd --no-debug

4、ps 與grep 常用組合用法,查找特定進程

  命令:ps -ef|grep ssh

[root@CTU1000094955 ~]# ps -ef|grep ssh
root      25566      1  0 Oct31 ?        00:00:00 /usr/sbin/sshd -D
root      59785  25566  0 10:52 ?        00:00:00 sshd: root@pts/0
root      66142  59795  0 11:18 pts/0    00:00:00 grep --color=auto ssh

5、將目前屬於您自己這次登入的PID與相關信息列示出來

  命令:ps -l

[root@CTU1000094955 ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  59795  59785  0  80   0 - 30751 wait   pts/0    00:00:00 bash
0 R     0  66798  59795  0  80   0 - 34861 -      pts/0    00:00:00 ps

  說明:

F 代表這個程序的旗標 (flag):4 代表此進程的權限為root;為1表示此子進程僅可進行復制(fork),而無法實際執行(exec)。

S 代表這個程序的狀態 (STAT),關於各 STAT 的含義已在上問題出。

UID 程序被該 UID 所擁有

PID 就是這個程序的 ID !

PPID 則是其上級父程序的ID

C CPU 使用的資源百分比

PRI/NI Priority /Nice的縮寫,代表此進程被CPU所執行的優先級,數值越小代表該進程越快被CPU執行

ADDR 這個是 kernel function,指出該程序在內存的那個部分。如果是個 running的程序,一般就是 "-"

SZ 使用掉的內存大小

WCHAN 目前這個程序是否正在運作當中,若為 - 表示正在運作

TTY 登陸者的終端機位置,若為遠程登錄則使用動態終端口(pts/n)

TIME 使用掉的 CPU 時間。是此進程實際花費CPU運行的時間,而不是系統時間。

CMD Command的縮寫,造成此程序的觸發進程的命令為何種命令

  為何在預設的情況下, ps 僅會列出與目前所在的 bash shell 有關的 PID 而已,所以, 當我使用 ps -l 的時候,只有2個 PID。

6、列出目前所有的正在內存當中的程序

  命令:ps aux

[root@CTU1000094955 ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 201588 13760 ?        Ss   Oct04  20:53 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2  0.0  0.0      0     0 ?        S    Oct04   0:12 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    Oct04   0:00 [ksoftirqd/0]
... ...中間省略了部分內容
root      68591  0.2 12.5 5609960 936952 ?      Sl   Nov16  24:18 /biz/maas/cmdp/jre/bin/java -Djava.util.logging.config.file=/biz/maas/cmdp/tomcat/conf/logging.properties -Djava.util.logging
root      70812  0.0  0.0 116272   708 ?        S    11:34   0:00 sleep 60
root      70892  0.0  0.0 141564  1692 pts/0    R+   11:35   0:00 ps aux
root      85204  0.0  0.0 384676  3780 ?        Ssl  Oct30  10:33 /usr/libexec/accounts-daemon
root     103598  0.0  0.0  18084  1732 ?        S    Oct30   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/CTU1000094955.pid
mysql    103762  0.0  6.4 2293168 478984 ?      Sl   Oct30  20:06 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/l
root     120139  0.0  0.0      0     0 ?        S    Nov11   0:14 [kworker/u256:0]
polkitd  126191  0.1  6.3 990528 473472 ?       Ssl  Oct10 113:22 /usr/lib/polkit-1/polkitd --no-debug

  說明(與ps -l並不相同):

USER:該 process 屬於那個使用者賬號的

PID :該 process 的號碼

%CPU:該 process 使用掉的 CPU 資源百分比

%MEM:該 process 所占用的物理內存百分比

VSZ :該 process 使用掉的虛擬內存量 (Kbytes)

RSS :該 process 占用的固定的內存量 (Kbytes)

TTY :該 process 是在那個終端機上面運作,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者程序,若為 pts/0 等等的,則表示為由網絡連接進主機的程序。

STAT:該程序目前的狀態,主要的狀態有

R :該程序目前正在運作,或者是可被運作

S :該程序目前正在睡眠當中 (可說是 idle 狀態),但可被某些訊號 (signal) 喚醒。

T :該程序目前正在偵測或者是停止了

Z :該程序應該已經終止,但是其父程序卻無法正常的終止他,造成 zombie (疆屍) 程序的狀態

START:該 process 被觸發啟動的時間

TIME :該 process 實際使用 CPU 運作的時間

COMMAND:該程序的實際指令

7、列出類似程序樹的程序顯示

  命令:ps -axjf

[root@CTU1000094955 ~]# ps -axjf
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
     0      2      0      0 ?            -1 S        0   0:12 [kthreadd]
     2      3      0      0 ?            -1 S        0   0:00  \_ [ksoftirqd/0]
     2      5      0      0 ?            -1 S<       0   0:00  \_ [kworker/0:0H]
     2      7      0      0 ?            -1 S        0   0:27  \_ [migration/0]

    ... ...中間省略了部分內容
     1 126191 126191 126191 ?            -1 Ssl    997 113:23 /usr/lib/polkit-1/polkitd --no-debug
126191  20349 126191 126191 ?            -1 Z      997   0:00  \_ [pkla-check-auth] <defunct>1  85204  85204  85204 ?            -1 Ssl      0  10:33 /usr/libexec/accounts-daemon
     1 103598 103580  85217 ?            -1 S        0   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/CTU1000094955.pid
103598 103762 103580  85217 ?            -1 Sl      27  20:06  \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/l
     1  25566  25566  25566 ?            -1 Ss       0   0:00 /usr/sbin/sshd -D
 25566  59785  59785  59785 ?            -1 Ss       0   0:00  \_ sshd: root@pts/0
 59785  59795  59795  59795 pts/0     71869 Ss       0   0:00      \_ -bash
 59795  71869  71869  59795 pts/0     71869 R+       0   0:00          \_ ps -axjf
     1  68591  68583  16869 ?            -1 Sl       0  24:19 /biz/maas/cmdp/jre/bin/java -Djava.util.logging.config.file=/biz/maas/cmdp/tomcat/conf/logging.properties -Djava.util.logging.man
     1  71817    829    829 ?            -1 Sl     991   0:01 /usr/bin/python -Es /usr/sbin/setroubleshootd -f

8、找出與 cron 與 syslog 這兩個服務有關的 PID 號碼

  命令:ps aux | egrep '(cron|syslog)'

[root@CTU1000094955 ~]# ps aux | egrep '(cron|syslog)'
root        856  0.0  0.2 506844 16808 ?        Ssl  Oct04  57:17 /usr/sbin/rsyslogd -n
root       1768  0.0  0.0 130480  1528 ?        Ss   Oct04   1:20 /usr/sbin/crond -n
gnome-i+   5961  0.0  0.0 477312  3576 ?        S<l  Oct04   0:13 /usr/bin/pulseaudio --start --log-target=syslog
root      72278  0.0  0.0 118872  1040 pts/0    S+   11:45   0:00 grep -E --color=auto (cron|syslog)

9、可以用 | 管道和 more 連接起來分頁查看

  命令:ps -aux |more

[root@CTU1000094955 ~]# ps -aux |more
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 201588 13760 ?        Ss   Oct04  20:53 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2  0.0  0.0      0     0 ?        S    Oct04   0:12 [kthreadd]
... ... 中間省略了部分
root         35  0.0  0.0      0     0 ?        S    Oct04   0:00 [rcuob/26]
root         36  0.0  0.0      0     0 ?        S    Oct04   0:00 [rcuob/27]
root         37  0.0  0.0      0     0 ?        S    Oct04   0:00 [rcuob/28]
--More--

10、把所有進程顯示出來,並輸出到ps001.txt文件

  命令:ps -aux > 目的文件

[root@CTU1000094955 ~]# ps -aux > pstest.txt
[root@CTU1000094955 ~]# ll
total 76
-rw-------. 1 root root  1664 Jan 16  2017 anaconda-ks.cfg
drwxr-xr-x. 2 root root  4096 Jan 16  2017 Desktop
drwxr-xr-x. 2 root root  4096 Jan 16  2017 Documents
drwxr-xr-x. 5 root root  4096 Nov  1 18:16 Downloads
-rw-------. 1 root root  1712 Jan 16  2017 initial-setup-ks.cfg
drwxr-xr-x. 2 root root  4096 Jan 16  2017 Music
drwxr-xr-x. 2 root root  4096 Jan 16  2017 Pictures
-rw-r--r--. 1 root root 36460 Nov 23 11:50 pstest.txt

11、輸出指定的字段

  命令:ps -o pid,ppid,pgrp,session,tpgid,comm

[root@CTU1000094955 ~]# ps -o pid,ppid,pgrp,session,tpgid,comm
   PID   PPID   PGRP   SESS  TPGID COMMAND
 59795  59785  59795  59795  73308 bash
 73308  59795  73308  59795  73308 ps


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM