ps命令


Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前執行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要動態的顯示進程資訊,就可以使用top命令。
要對進程進行監測和控制,首先必須要了解當前進程的情況,也就是需要檢視當前進程,而 ps 命令就是最基本同時也是非常強大的進程檢視命令。使用該命令可以確定有哪些進程正在執行和執行的狀態、進程是否結束、進程有沒有僵死、哪些進程佔用了過多的資源等等。總之大部分資訊都是可以通過執行該命令得到的。
ps為我們提供了進程的一次性的檢視,它所提供的檢視結果並不動態連續的;如果想對進程時間監控,應該用 top 工具。
kill 命令用於殺死進程。

linux上進程有5種狀態:

  1. 執行(正在執行或在執行佇列中等待)
  2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)
  3. 不可中斷(收到信號不喚醒和不可執行, 進程必須等待直到有中斷發生)
  4. 僵死(進程已終止, 但進程描述符存在, 直到父進程呼叫wait4()系統呼叫後釋放)
  5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止執行執行)

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

  • D 不可中斷 uninterruptible sleep (usually IO)
  • R 執行 runnable (on run queue)
  • S 中斷 sleeping
  • T 停止 traced or stopped
  • Z 僵死 a defunct (」zombie」) process

1.命令格式

ps[引數]

2.命令功能

用來顯示當前進程的狀態

3.命令引數

  • a 顯示所有進程
  • -a 顯示同一終端下的所有程式
  • -A 顯示所有進程
  • c 顯示進程的真實名稱
  • -N 反向選擇
  • -e 等於「-A」
  • e 顯示環境變數
  • f 顯示程式間的關係
  • -H 顯示樹狀結構
  • r 顯示當前終端的進程
  • T 顯示當前終端的所有程式
  • u 指定使用者的所有進程
  • -au 顯示較詳細的資訊
  • -aux 顯示所有包含其他使用者的行程
  • -C<命令> 列出指定命令的狀況
  • --lines<行數> 每頁顯示的行數
  • --width<字元數> 每頁顯示的字元數
  • --help 顯示幫助資訊
  • --version 顯示版本顯示

4.使用範例

範例1:顯示所有進程資訊

命令:

ps -A

輸出:

[yiibai@localhost ~]$ ps -A
   PID TTY          TIME CMD
     1 ?        00:00:03 systemd
     2 ?        00:00:00 kthreadd
     3 ?        00:00:00 ksoftirqd/0
     4 ?        00:00:00 kworker/0:0
     5 ?        00:00:00 kworker/0:0H
     6 ?        00:00:00 kworker/u256:0
     7 ?        00:00:00 migration/0
     8 ?        00:00:00 rcu_bh
     9 ?        00:00:01 rcu_sched
    10 ?        00:00:00 watchdog/0
    12 ?        00:00:00 khelper
    13 ?        00:00:00 kdevtmpfs
    14 ?        00:00:00 netns
    15 ?        00:00:00 khungtaskd
    16 ?        00:00:00 writeback
    17 ?        00:00:00 kintegrityd
    18 ?        00:00:00 bioset
    19 ?        00:00:00 kblockd
    20 ?        00:00:00 md
    21 ?        00:00:00 kworker/0:1
    26 ?        00:00:00 kswapd0
    27 ?        00:00:00 ksmd
    28 ?        00:00:00 khugepaged
    29 ?        00:00:00 fsnotify_mark
    30 ?        00:00:00 crypto
    38 ?        00:00:00 kthrotld
    39 ?        00:00:00 kworker/u256:1
    40 ?        00:00:00 kmpath_rdacd
    41 ?        00:00:00 kpsmoused
    42 ?        00:00:00 kworker/0:2
    43 ?        00:00:00 ipv6_addrconf
    62 ?        00:00:00 deferwq
    94 ?        00:00:00 kauditd
   264 ?        00:00:02 kworker/0:3
   270 ?        00:00:00 ata_sff
   271 ?        00:00:00 mpt_poll_0
   272 ?        00:00:00 mpt/0
   273 ?        00:00:00 scsi_eh_0
   274 ?        00:00:00 scsi_tmf_0
   277 ?        00:00:00 kworker/u256:2
   278 ?        00:00:00 scsi_eh_1
   279 ?        00:00:00 scsi_tmf_1
   280 ?        00:00:00 scsi_eh_2
   282 ?        00:00:00 scsi_tmf_2
   283 ?        00:00:00 kworker/u256:3
   286 ?        00:00:00 ttm_swap
   366 ?        00:00:00 kdmflush
   367 ?        00:00:00 bioset
   378 ?        00:00:00 kdmflush
   379 ?        00:00:00 bioset
   392 ?        00:00:00 xfsalloc
   393 ?        00:00:00 xfs_mru_cache
   394 ?        00:00:00 xfs-buf/dm-0
   395 ?        00:00:00 xfs-data/dm-0
   396 ?        00:00:00 xfs-conv/dm-0
   397 ?        00:00:00 xfs-cil/dm-0
   398 ?        00:00:00 xfs-reclaim/dm-
   399 ?        00:00:00 xfs-log/dm-0
   400 ?        00:00:00 xfs-eofblocks/d
   401 ?        00:00:00 xfsaild/dm-0
   470 ?        00:00:00 systemd-journal
   481 ?        00:00:00 kworker/0:1H
   491 ?        00:00:00 lvmetad
   495 ?        00:00:01 systemd-udevd
   517 ?        00:00:00 nfit
   521 ?        00:00:00 kworker/u257:0
   522 ?        00:00:00 hci0
   523 ?        00:00:00 hci0
   524 ?        00:00:00 kworker/u257:1
   525 ?        00:00:00 kworker/u257:2
   584 ?        00:00:00 xfs-buf/sda1
   585 ?        00:00:00 xfs-data/sda1
   586 ?        00:00:00 xfs-conv/sda1
   587 ?        00:00:00 xfs-cil/sda1
   588 ?        00:00:00 xfs-reclaim/sda
   589 ?        00:00:00 xfs-log/sda1
   590 ?        00:00:00 xfs-eofblocks/s
   591 ?        00:00:00 xfsaild/sda1
   595 ?        00:00:00 kdmflush
   596 ?        00:00:00 bioset
   602 ?        00:00:00 xfs-buf/dm-2
   603 ?        00:00:00 xfs-data/dm-2
   604 ?        00:00:00 xfs-conv/dm-2
   605 ?        00:00:00 xfs-cil/dm-2
   606 ?        00:00:00 xfs-reclaim/dm-
   607 ?        00:00:00 xfs-log/dm-2
   608 ?        00:00:00 xfs-eofblocks/d
   609 ?        00:00:00 xfsaild/dm-2
   622 ?        00:00:00 auditd
   642 ?        00:00:00 dbus-daemon
   644 ?        00:00:00 chronyd
   650 ?        00:00:00 polkitd
   655 ?        00:00:00 systemd-logind
   661 ?        00:00:01 vmtoolsd
   662 ?        00:00:00 NetworkManager
   666 ?        00:00:00 crond
   718 ?        00:00:00 dhclient
   922 ?        00:00:00 tuned
   923 ?        00:00:00 rsyslogd
  1049 ?        00:00:00 sshd
  1534 ?        00:00:00 master
  1569 ?        00:00:00 pickup
  1573 ?        00:00:00 qmgr
  2136 ?        00:00:00 kworker/0:2H
  2165 ?        00:00:00 sshd
  2167 ?        00:00:00 sshd
  2168 pts/0    00:00:00 bash
  2188 tty1     00:00:00 agetty
  2200 ?        00:00:00 anacron
  2203 pts/0    00:00:00 ps
[yiibai@localhost ~]$

範例2:顯示指定使用者資訊

命令:

ps -u root
ps -u yiibai

輸出:

[yiibai@localhost ~]$ ps -u root
   PID TTY          TIME CMD
     1 ?        00:00:03 systemd
     2 ?        00:00:00 kthreadd
     3 ?        00:00:00 ksoftirqd/0
     5 ?        00:00:00 kworker/0:0H
     6 ?        00:00:00 kworker/u256:0
     7 ?        00:00:00 migration/0
     8 ?        00:00:00 rcu_bh
     9 ?        00:00:01 rcu_sched
    10 ?        00:00:00 watchdog/0
    12 ?        00:00:00 khelper
    13 ?        00:00:00 kdevtmpfs
    14 ?        00:00:00 netns
    15 ?        00:00:00 khungtaskd
    16 ?        00:00:00 writeback
    17 ?        00:00:00 kintegrityd
    18 ?        00:00:00 bioset
    19 ?        00:00:00 kblockd
    20 ?        00:00:00 md
    26 ?        00:00:00 kswapd0
    27 ?        00:00:00 ksmd
    28 ?        00:00:00 khugepaged
    29 ?        00:00:00 fsnotify_mark
    30 ?        00:00:00 crypto
    38 ?        00:00:00 kthrotld
    40 ?        00:00:00 kmpath_rdacd
    41 ?        00:00:00 kpsmoused
    42 ?        00:00:00 kworker/0:2
    43 ?        00:00:00 ipv6_addrconf
    62 ?        00:00:00 deferwq
    94 ?        00:00:00 kauditd
   264 ?        00:00:02 kworker/0:3
   270 ?        00:00:00 ata_sff
   271 ?        00:00:00 mpt_poll_0
   272 ?        00:00:00 mpt/0
   273 ?        00:00:00 scsi_eh_0
   274 ?        00:00:00 scsi_tmf_0
   277 ?        00:00:00 kworker/u256:2
   278 ?        00:00:00 scsi_eh_1
   279 ?        00:00:00 scsi_tmf_1
   280 ?        00:00:00 scsi_eh_2
   282 ?        00:00:00 scsi_tmf_2
   286 ?        00:00:00 ttm_swap
   366 ?        00:00:00 kdmflush
   367 ?        00:00:00 bioset
   378 ?        00:00:00 kdmflush
   379 ?        00:00:00 bioset
   392 ?        00:00:00 xfsalloc
   393 ?        00:00:00 xfs_mru_cache
   394 ?        00:00:00 xfs-buf/dm-0
   395 ?        00:00:00 xfs-data/dm-0
   396 ?        00:00:00 xfs-conv/dm-0
   397 ?        00:00:00 xfs-cil/dm-0
   398 ?        00:00:00 xfs-reclaim/dm-
   399 ?        00:00:00 xfs-log/dm-0
   400 ?        00:00:00 xfs-eofblocks/d
   401 ?        00:00:00 xfsaild/dm-0
   470 ?        00:00:00 systemd-journal
   481 ?        00:00:00 kworker/0:1H
   491 ?        00:00:00 lvmetad
   495 ?        00:00:01 systemd-udevd
   517 ?        00:00:00 nfit
   521 ?        00:00:00 kworker/u257:0
   522 ?        00:00:00 hci0
   523 ?        00:00:00 hci0
   524 ?        00:00:00 kworker/u257:1
   525 ?        00:00:00 kworker/u257:2
   584 ?        00:00:00 xfs-buf/sda1
   585 ?        00:00:00 xfs-data/sda1
   586 ?        00:00:00 xfs-conv/sda1
   587 ?        00:00:00 xfs-cil/sda1
   588 ?        00:00:00 xfs-reclaim/sda
   589 ?        00:00:00 xfs-log/sda1
   590 ?        00:00:00 xfs-eofblocks/s
   591 ?        00:00:00 xfsaild/sda1
   595 ?        00:00:00 kdmflush
   596 ?        00:00:00 bioset
   602 ?        00:00:00 xfs-buf/dm-2
   603 ?        00:00:00 xfs-data/dm-2
   604 ?        00:00:00 xfs-conv/dm-2
   605 ?        00:00:00 xfs-cil/dm-2
   606 ?        00:00:00 xfs-reclaim/dm-
   607 ?        00:00:00 xfs-log/dm-2
   608 ?        00:00:00 xfs-eofblocks/d
   609 ?        00:00:00 xfsaild/dm-2
   622 ?        00:00:00 auditd
   655 ?        00:00:00 systemd-logind
   661 ?        00:00:01 vmtoolsd
   662 ?        00:00:00 NetworkManager
   666 ?        00:00:00 crond
   718 ?        00:00:00 dhclient
   922 ?        00:00:00 tuned
   923 ?        00:00:00 rsyslogd
  1049 ?        00:00:00 sshd
  1534 ?        00:00:00 master
  2136 ?        00:00:00 kworker/0:2H
  2165 ?        00:00:00 sshd
  2188 tty1     00:00:00 agetty
  2200 ?        00:00:00 anacron
  2316 ?        00:00:00 kworker/0:0
[yiibai@localhost ~]$ ps -u yiibai
   PID TTY          TIME CMD
  2167 ?        00:00:00 sshd
  2168 pts/0    00:00:00 bash
  2318 pts/0    00:00:00 ps
[yiibai@localhost ~]$

範例3:顯示所有進程資訊,連同命令列

命令:

ps -ef

輸出:

[yiibai@localhost ~]$ ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  1 19:58 ?        00:00:03 /usr/lib/systemd/systemd --swi
root          2      0  0 19:58 ?        00:00:00 [kthreadd]
root          3      2  0 19:58 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 19:58 ?        00:00:00 [kworker/0:0H]
root          6      2  0 19:58 ?        00:00:00 [kworker/u256:0]
root          7      2  0 19:58 ?        00:00:00 [migration/0]
root          8      2  0 19:58 ?        00:00:00 [rcu_bh]
root          9      2  0 19:58 ?        00:00:01 [rcu_sched]
root         10      2  0 19:58 ?        00:00:00 [watchdog/0]
root         12      2  0 19:58 ?        00:00:00 [khelper]
root         13      2  0 19:58 ?        00:00:00 [kdevtmpfs]
root         14      2  0 19:58 ?        00:00:00 [netns]
root         15      2  0 19:58 ?        00:00:00 [khungtaskd]
root         16      2  0 19:58 ?        00:00:00 [writeback]
root         17      2  0 19:58 ?        00:00:00 [kintegrityd]
root         18      2  0 19:58 ?        00:00:00 [bioset]
root         19      2  0 19:58 ?        00:00:00 [kblockd]
root         20      2  0 19:58 ?        00:00:00 [md]
root         26      2  0 19:58 ?        00:00:00 [kswapd0]
root         27      2  0 19:58 ?        00:00:00 [ksmd]
root         28      2  0 19:58 ?        00:00:00 [khugepaged]
root         29      2  0 19:58 ?        00:00:00 [fsnotify_mark]
root         30      2  0 19:58 ?        00:00:00 [crypto]
root         38      2  0 19:58 ?        00:00:00 [kthrotld]
root         40      2  0 19:58 ?        00:00:00 [kmpath_rdacd]
root         41      2  0 19:58 ?        00:00:00 [kpsmoused]
root         42      2  0 19:58 ?        00:00:00 [kworker/0:2]

......
chrony      644      1  0 19:59 ?        00:00:00 /usr/sbin/chronyd
polkitd     650      1  0 19:59 ?        00:00:00 /usr/lib/polkit-1/polkitd --no
root        655      1  0 19:59 ?        00:00:00 /usr/lib/systemd/systemd-login
root        661      1  0 19:59 ?        00:00:02 /usr/bin/vmtoolsd
root        662      1  0 19:59 ?        00:00:00 /usr/sbin/NetworkManager --no-
root        666      1  0 19:59 ?        00:00:00 /usr/sbin/crond -n
root        718    662  0 19:59 ?        00:00:00 /sbin/dhclient -d -q -sf /usr/
root        922      1  0 19:59 ?        00:00:00 /usr/bin/python -Es /usr/sbin/
root        923      1  0 19:59 ?        00:00:00 /usr/sbin/rsyslogd -n
root       1049      1  0 19:59 ?        00:00:00 /usr/sbin/sshd
root       1534      1  0 19:59 ?        00:00:00 /usr/libexec/postfix/master -w
postfix    1569   1534  0 19:59 ?        00:00:00 pickup -l -t unix -u
postfix    1573   1534  0 19:59 ?        00:00:00 qmgr -l -t unix -u
root       2136      2  0 19:59 ?        00:00:00 [kworker/0:2H]
root       2165   1049  0 20:00 ?        00:00:00 sshd: yiibai [priv]
yiibai     2167   2165  0 20:00 ?        00:00:00 sshd: yiibai@pts/0
yiibai     2168   2167  0 20:00 pts/0    00:00:00 -bash
root       2188      1  0 20:00 tty1     00:00:00 /sbin/agetty --noclear tty1 li
root       2200      1  0 20:01 ?        00:00:00 /usr/sbin/anacron -s
root       2316      2  0 20:03 ?        00:00:00 [kworker/0:0]
yiibai     2426   2168  0 20:04 pts/0    00:00:00 ps -ef
[yiibai@localhost ~]$

範例4: ps 與grep 常用組合用法,查詢特定進程

命令:

ps -ef|grep ssh

輸出:

[yiibai@localhost ~]$ ps -ef|grep ssh
root       1049      1  0 19:59 ?        00:00:00 /usr/sbin/sshd
root       2165   1049  0 20:00 ?        00:00:00 sshd: yiibai [priv]
yiibai     2167   2165  0 20:00 ?        00:00:00 sshd: yiibai@pts/0
yiibai     2535   2168  0 20:05 pts/0    00:00:00 grep --color=auto ssh

範例5:將目前屬於您自己這次登入的 PID 與相關資訊列示出來

命令:

ps -l

輸出:

[yiibai@localhost ~]$ ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000   2168   2167  0  80   0 - 28869 wait   pts/0    00:00:00 bash
0 R  1000   2547   2168  0  80   0 - 37233 -      pts/0    00:00:00 ps
[yiibai@localhost ~]$

說明各相關資訊的含義:
F 代表這個程式的旗標 (flag), 4 代表使用者為 super user
S 代表這個程式的狀態 (STAT),關於各 STAT 的意義將在內文介紹
UID 程式被該 UID 所擁有
PID 就是這個程式的 ID
PPID 則是其上級父程式的ID
C CPU 使用的資源百分比
PRI 這個是 Priority (優先執行序) 的縮寫,詳細後面介紹
NI 這個是 Nice 值,在下一小節我們會持續介紹
ADDR 這個是 kernel function,指出該程式在記憶體的那個部分。如果是個 running的程式,一般就是 「-「
SZ 使用掉的記憶體大小
WCHAN 目前這個程式是否正在運作當中,若為 - 表示正在運作
TTY 登入者的終端機位置
TIME 使用掉的 CPU 時間。
CMD 所下達的指令為何
在預設的情況下, ps 僅會列出與目前所在的 bash shell 有關的 PID 而已,所以, 當我使用 ps -l 的時候,只有三個 PID。

範例6:列出目前所有的正在記憶體當中的程式

命令:

ps aux

輸出:

[yiibai@localhost ~]$ ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.1  0.3 125084  3612 ?        Ss   19:58   0:03 /usr/lib/syste
root          2  0.0  0.0      0     0 ?        S    19:58   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    19:58   0:00 [ksoftirqd/0]
root          6  0.0  0.0      0     0 ?        S    19:58   0:00 [kworker/u256:
root          7  0.0  0.0      0     0 ?        S    19:58   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    19:58   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        R    19:58   0:01 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S    19:58   0:00 [watchdog/0]
......

說明:
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

輸出:

[yiibai@localhost ~]$ ps -axjf
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
     0      2      0      0 ?            -1 S        0   0:00 [kthreadd]
     2      3      0      0 ?            -1 S        0   0:00  \_ [ksoftirqd/0]
     2      6      0      0 ?            -1 S        0   0:00  \_ [kworker/u256:
     2      7      0      0 ?            -1 S        0   0:00  \_ [migration/0]
     2      8      0      0 ?            -1 S        0   0:00  \_ [rcu_bh]
     2      9      0      0 ?            -1 S        0   0:01  \_ [rcu_sched]
     2     10      0      0 ?            -1 S        0   0:00  \_ [watchdog/0]
     2     12      0      0 ?            -1 S<       0   0:00  \_ [khelper]
     2     13      0      0 ?            -1 S        0   0:00  \_ [kdevtmpfs]
     2     14      0      0 ?            -1 S<       0   0:00  \_ [netns]
     2     15      0      0 ?            -1 S        0   0:00  \_ [khungtaskd]
     2     16      0      0 ?            -1 S<       0   0:00  \_ [writeback]
     2     17      0      0 ?            -1 S<       0   0:00  \_ [kintegrityd]
     2     18      0      0 ?            -1 S<       0   0:00  \_ [bioset]
     2     19      0      0 ?            -1 S<       0   0:00  \_ [kblockd]
     2     20      0      0 ?            -1 S<       0   0:00  \_ [md]
     2     26      0      0 ?            -1 S        0   0:00  \_ [kswapd0]
     2     27      0      0 ?            -1 SN       0   0:00  \_ [ksmd]
     2     28      0      0 ?            -1 SN       0   0:00  \_ [khugepaged]
     2     29      0      0 ?            -1 S        0   0:00  \_ [fsnotify_mark
     2     30      0      0 ?            -1 S<       0   0:00  \_ [crypto]
     2     38      0      0 ?            -1 S<       0   0:00  \_ [kthrotld]
......

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

命令執行及輸出:

[yiibai@localhost ~]$ ps aux | egrep '(cron|syslog)'
root        666  0.0  0.1 126224  1584 ?        Ss   19:59   0:00 /usr/sbin/cro d -n
root        923  0.0  0.4 283372  4064 ?        Ssl  19:59   0:00 /usr/sbin/rsyslogd -n
yiibai     5963  0.0  0.0 112648   980 pts/0    R+   20:33   0:00 grep -E --color=auto (cron|syslog)
[yiibai@localhost ~]$

範例9(其它):

1. 可以用 | 管道和 more 連線起來分頁檢視
命令:

ps -aux |more

2. 把所有進程顯示出來,並輸出到ps001.txt檔案
命令:

ps -aux > ps001.txt

3. 輸出指定的欄位
命令:

 ps -o pid,ppid,pgrp,session,tpgid,comm

輸出:

[yiibai@localhost ~]$ ps -o pid,ppid,pgrp,session,tpgid,comm
   PID   PPID   PGRP   SESS  TPGID COMMAND
  2168   2167   2168   2168   5970 bash
  5970   2168   5970   2168   5970 ps
[yiibai@localhost ~]$