一、簡介
ps命令用于報告當前系統的進程狀態,ps命令同時也是個非常強大的進程查看命令,該命令可以查看到當前哪些進程在運行,進程的運行狀態、進程占用的資源等等。ps命令結合kill命令可以隨機終止異常的進程,這在日常維護中也是經常使用的一種手段。
二、ps命令的使用
1、命令格式
ps [options]
2、選項
ps命令的選項有三種風格:
1、UNIX格式,類似于-a;
2、BSD格式,如aux;
3、長選項,--help;
常用選項包括:
a:顯示所有與終端相關的進程;
x:顯示所有與終端無關的進程;
u:以用戶為中心組織顯示進程的狀態信息;
-e:顯示所有進程;
-f:顯示進程的完整格式的信息;
-F:顯示更詳細的完整格式,比-f詳細;
-H:以層級結構顯示進程的相關信息;
-p PID1,PID2...:根據指定的PID顯示對應的進程信息;
-u USER:顯示指定用戶的進程信息;
-o filter1,filter2...:自定義要顯示的字段,各選項之間以,分隔;常用的filter包括:pid、ni、pri、command、psr、pcpu、stat、tty、ppid、rtprio等等;
常用的組合選項有:aux,-ef,-eFH,-eo,axo;
3、ps命令信息輸出
[root@localhost ~]# ps aux | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 126104 5280 ? Ss 03:05 0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 03:05 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 03:05 0:01 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 03:05 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 03:05 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/0]
上述是ps命令的一個輸出信息,其中比較直觀的像USER、PID、CPU等這些就不是解釋了,其他的輸出狀態分別指:
VSZ:虛擬內存集;
RSS:Resident Size,常駐內存集;
TTY:進程所屬的終端是哪個;
STAT:進程的運行狀態;
START:進程的啟動時間;
TIME:進程的運行時間;
COMMAND:進程名;
C:表示CPU的利用率
PSR:表示CPU運行在哪個CPU之上;
其中STAT的常見狀態有以下:
R:running;
S:interruptable sleeping;
D:uninterruptable sleeping;
T:Stopped;
Z:zombie;
+:前臺進程;
l:多線程進程;
N:低優先級進程;
<:高優先級進程;
s:session leader;
三、使用案例
- 顯示所有與用戶相關的進程
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 126104 5292 ? Ss 03:05 0:05 /usr/lib/systemd/systemd --switched-root --syste
root 2 0.0 0.0 0 0 ? S 03:05 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 03:05 0:01 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 03:05 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 03:05 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/0]
root 10 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/1]
root 11 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/2]
root 12 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/3]
root 13 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/4]
...
- 通過進程ID顯示相應的進程信息
[root@localhost ~]# ps -F -p 1768,30698
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1768 1 0 20640 2864 0 03:05 ? 00:00:00 /usr/sbin/sshd -D
root 30698 1768 0 35718 3664 0 10:06 ? 00:00:01 sshd: root@pts/0
- 自定義顯示的輸出格式
[root@localhost ~]# ps -e -o pmem,pcpu,pid,uname
%MEM %CPU PID USER
0.5 0.0 1 root
0.0 0.0 2 root
0.0 0.0 3 root
0.0 0.0 7 root
0.0 0.0 8 root
0.0 0.0 9 root
0.0 0.0 10 root
- 根據父進程ID查詢子進程
[root@localhost ~]# ps -F --ppid 1768
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 30698 1768 0 35718 3664 0 10:06 ? 00:00:01 sshd: root@pts/0
root 38673 1768 0 35718 5000 0 11:11 ? 00:00:00 sshd: root@pts/1
- 根據用戶查詢其對應的進程信息
[root@localhost ~]# ps -f -u charlie
UID PID PPID C STIME TTY TIME CMD
charlie 42676 42670 0 12:00 ? 00:00:00 sshd: charlie@pts/2
charlie 42677 42676 0 12:00 pts/2 00:00:00 -bash
charlie 42772 42677 0 12:00 pts/2 00:00:00 ping www.baidu.com