ps命令是基礎的監控命令,ps命令好比工具中的瑞士軍刀,它能輸出運行在系統上的所有程序的許多信息。
參數
- -A 顯示所有進程(與-e效果一樣)
- -a 顯示除控制進程與無端進程外的所有進程
- -N 顯示與指定參數不符的所有進程
- -d 顯示除控制進程外的所有進程
- -C 顯示包含在cmdlist列表中的進程
- -G 顯示組ID在grplist列表中的進程
- -U 顯示屬主的用戶ID在uerlist列表中的進程
- -g 顯示會話或組ID在grplist列表中的進程
- -p 顯示PID在pidlist列表中的進程
- -s 顯示會話ID在sesslist列表中的進程
- -t 顯示終端ID在ttylist列表中的進程
- -u 顯示有效用戶ID在userlist列表中的進程
- -F 顯示更多額外輸出(相對於-f參數而言)
- -O 顯示默認輸出以外以及format列表指定的特定列
- -M 顯示進程的安全信息
- -c 顯示進程的額外調度信息
- -f 顯示完整格式的輸出
- -j 顯示任務信息
- -l 顯示長列表
- -o 僅顯示由format指定的列
- -y 不要顯示進程標記
- -Z 顯示安全標簽信息
- -H 用層級格式來顯示信息
- -n 定義WCHAN列顯示的值
- -w 采用寬輸出模式,不限寬度顯示
- -L 顯示進程中的線程
- -V 顯示ps的版本號
常用組合
- ps aux 列出目前所有的正在內存當中的程序
a:所有與終端相關的進程
u:所有與終端無關的進程
x:以用戶為中心組織進程狀態信息顯示
- ps –ef 顯示所有信息,連同命令行
-e:顯示所有進程
-f:顯示完整格式的進程信息
輸出信息解釋
Linux:/usr/local/sbin # ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Dec17 ? 00:00:02 init [5]
root 2 0 0 Dec17 ? 00:00:00 [kthreadd]
root 3 2 0 Dec17 ? 00:00:01 [ksoftirqd/0]
root 5 2 0 Dec17 ? 00:00:02 [kworker/u:0]
root 6 2 0 Dec17 ? 00:00:00 [migration/0]
root 7 2 0 Dec17 ? 00:00:00 [watchdog/0]
…
- UID 啟動這些進程的用戶
- PID 進程ID
- PPID 父進程ID
- C 進程CPU中的利用率
- STIME 進程啟動時的系統時間
- TTY 進程啟動時的終端設備
- TIME 進行進程需要的累計CPU時間
- CMD 啟動的程序名稱
如果想要查看更多的輸出信息
Linux:/usr/local/sbin # ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 19366 19363 0 80 0 - 6459 wait pts/2 00:00:12 bash
4 R 0 27857 19366 99 80 0 - 1182 - pts/2 00:00:00 ps
- F 內核分配給進程的系統標記
- S 進程的狀態(O代表正在運行; S代表在睡眠; R代表可運行 正等待運行;Z代表僵化,進程已結束但父進程不存在;T代表停止)
- PRI 進程的優先級
- NI 謙讓度值用來參與決定優先級
- ADDR 進程的內存地址
- SZ 假如進程被換出,所需交換空間的大致大小
- WCHAN 進程休眠的內核函數的地址
實際案例
1.顯示所有進程信息
Linux:/usr/local/sbin # ps -A
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:02 ksoftirqd/0
5 ? 00:00:02 kworker/u:0
6 ? 00:00:00 migration/0
7 ? 00:00:00 watchdog/0
8 ? 00:00:00 cpuset
9 ? 00:00:00 khelper
…
2.顯示指定用戶信息
Linux:/usr/local/sbin # ps -u root
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:02 ksoftirqd/0
5 ? 00:00:02 kworker/u:0
6 ? 00:00:00 migration/0
7 ? 00:00:00 watchdog/0
8 ? 00:00:00 cpuset
9 ? 00:00:00 khelper
10 ? 00:00:00 netns
11 ? 00:00:00 sync_supers
12 ? 00:00:00 bdi-default
…
3.查找特定進程
Linux:/usr/local/sbin # ps -ef|grep sshd
root 3611 1 0 Dec17 ? 00:00:00 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid
root 19363 3611 0 Dec17 ? 00:00:03 sshd: root@pts/2
root 28205 19366 99 03:04 pts/2 00:00:00 grep sshd