ps 程序檢視器
阿新 • • 發佈:2020-07-15
Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前執行的那些程序。ps命令列出的是當前那些程序的快照,就是執行ps命令的那個時刻的那些程序,如果想要動態的顯示程序資訊,就可以使用top命令。
要對程序進行監測和控制,首先必須要了解當前程序的情況,也就是需要檢視當前程序,而 ps 命令就是最基本同時也是非常強大的程序檢視命令。使用該命令可以確定有哪些程序正在執行和執行的狀態、程序是否結束、程序有沒有僵死、哪些程序佔用了過多的資源等等。總之大部分資訊都是可以通過執行該命令得到的。
ps 為我們提供了程序的一次性的檢視,它所提供的檢視結果並不動態連續的;如果想對程序時間監控,應該用 top linux下的工作管理員工具。
注:kill 命令用於殺死程序。
linux上程序有5種狀態:
- 執行(正在執行或在執行佇列中等待)
- 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到訊號)
- 不可中斷(收到訊號不喚醒和不可執行, 程序必須等待直到有中斷髮生)
- 僵死(程序已終止, 但程序描述符存在, 直到父程序呼叫wait4()系統呼叫後釋放)
- 停止(程序收到SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU訊號後停止執行執行)
ps工具標識程序的5種狀態碼:
- D 不可中斷 uninterruptible sleep (usually IO)
- R 執行 runnable (on run queue)
- S 中斷 sleeping
- T 停止 traced or stopped
- Z 僵死 a defunct (”zombie”) process
4.1. 命令引數
- a 顯示所有程序
- -a 顯示同一終端下的所有程式
- -A 顯示所有程序
- c 顯示程序的真實名稱
- -N 反向選擇
- -e 等於“-A”
- e 顯示環境變數
- f 顯示程式間的關係
- -H 顯示樹狀結構
- r 顯示當前終端的程序
- T 顯示當前終端的所有程式
- u 指定使用者的所有程序
- -au 顯示較詳細的資訊
- -aux 顯示所有包含其他使用者的行程
- -C<命令> 列出指定命令的狀況
- –lines<行數> 每頁顯示的行數
- –width<字元數> 每頁顯示的字元數
- –help 顯示幫助資訊
- –version 顯示版本顯示
4.2. 輸出列的含義
- 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 所下達的指令為何
4.3. 使用例項
例項1:顯示所有程序資訊
[root@localhost test6]# ps -A PID TTY TIME CMD 1 ? 00:00:00 init 2 ? 00:00:01 migration/0 3 ? 00:00:00 ksoftirqd/0 4 ? 00:00:01 migration/1 5 ? 00:00:00 ksoftirqd/1 6 ? 00:29:57 events/0 7 ? 00:00:00 events/1 8 ? 00:00:00 khelper 49 ? 00:00:00 kthread 54 ? 00:00:00 kblockd/0 55 ? 00:00:00 kblockd/1 56 ? 00:00:00 kacpid 217 ? 00:00:00 cqueue/0 ……省略部分結果
例項2:顯示指定使用者資訊
[root@localhost test6]# ps -u root PID TTY TIME CMD 1 ? 00:00:00 init 2 ? 00:00:01 migration/0 3 ? 00:00:00 ksoftirqd/0 4 ? 00:00:01 migration/1 5 ? 00:00:00 ksoftirqd/1 6 ? 00:29:57 events/0 7 ? 00:00:00 events/1 8 ? 00:00:00 khelper 49 ? 00:00:00 kthread 54 ? 00:00:00 kblockd/0 55 ? 00:00:00 kblockd/1 56 ? 00:00:00 kacpid ……省略部分結果
例項3:顯示所有程序資訊,連同命令列
[root@localhost test6]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Nov02 ? 00:00:00 init [3] root 2 1 0 Nov02 ? 00:00:01 [migration/0] root 3 1 0 Nov02 ? 00:00:00 [ksoftirqd/0] root 4 1 0 Nov02 ? 00:00:01 [migration/1] root 5 1 0 Nov02 ? 00:00:00 [ksoftirqd/1] root 6 1 0 Nov02 ? 00:29:57 [events/0] root 7 1 0 Nov02 ? 00:00:00 [events/1] root 8 1 0 Nov02 ? 00:00:00 [khelper] root 49 1 0 Nov02 ? 00:00:00 [kthread] root 54 49 0 Nov02 ? 00:00:00 [kblockd/0] root 55 49 0 Nov02 ? 00:00:00 [kblockd/1] root 56 49 0 Nov02 ? 00:00:00 [kacpid]
例項4: ps 與grep 組合使用,查詢特定程序
[root@localhost test6]# ps -ef|grep ssh root 2720 1 0 Nov02 ? 00:00:00 /usr/sbin/sshd root 17394 2720 0 14:58 ? 00:00:00 sshd: root@pts/0 root 17465 17398 0 15:57 pts/0 00:00:00 grep ssh
例項5:將與這次登入的 PID 與相關資訊列示出來
[root@localhost test6]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 17398 17394 0 75 0 - 16543 wait pts/0 00:00:00 bash
4 R 0 17469 17398 0 77 0 - 15877 - pts/0 00:00:00 ps
例項6:列出目前所有的正在記憶體中的程式
[root@localhost test6]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 10368 676 ? Ss Nov02 0:00 init [3] root 2 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/0] root 3 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/0] root 4 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/1] root 5 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/1] root 6 0.0 0.0 0 0 ? S< Nov02 29:57 [events/0] root 7 0.0 0.0 0 0 ? S< Nov02 0:00 [events/1] root 8 0.0 0.0 0 0 ? S< Nov02 0:00 [khelper] root 49 0.0 0.0 0 0 ? S< Nov02 0:00 [kthread] root 54 0.0 0.0 0 0 ? S< Nov02 0:00 [kblockd/0] root 55 0.0 0.0 0 0 ? S< Nov02 0:00 [kblockd/1] root 56 0.0 0.0 0 0 ? S< Nov02 0:00 [kacpid]