ps 命令是 process status 的簡寫,主要用於查詢當前正在運行中進程的信息,它從 /proc/進程ID
目錄中讀取指定進程ID的信息mysql
ps [options]
ps 的選項很是多,總共有一百多個選項,能夠經過 ps L | wc -l
命令查看ps的選項數量sql
這篇文章主要介紹 ps 命令的一些經常使用的用法,對於一些使用頻率很低的選項不在這裏討論centos
根據選項前是否有 -
,ps命令的選項能夠分紅如下幾種風格bash
-
開頭-
開頭--
開頭[root@ecs-centos-7 ~]# ps p 842 PID TTY STAT TIME COMMAND 842 ? Sl 12:55 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid [root@ecs-centos-7 ~]# ps -p 842 PID TTY TIME CMD 842 ? 00:12:55 mysqld [root@ecs-centos-7 ~]# ps --pid 842 PID TTY TIME CMD 842 ? 00:12:55 mysqld
上面的例子中 ps p 842
和 ps -p 842
以及 ps --pid 842
都是查詢進程ID爲842的進程信息,只不過度別用ps命令選項的 BSD風格、UNIX風格、GNU風格而已服務器
注意:ps命令選項能夠混用不一樣風格的選項,可是可能會出現衝突,兼容混用的主要緣由是幫助過分舊的腳本和習慣,咱們實際使用的時候儘可能使用同一種風格的選項ui
經過 ps -A
或者 ps -e
命令能夠查看全部運行中的進程線程
[tt@ecs-centos-7 ~]$ ps -fA | more UID PID PPID C STIME TTY TIME CMD root 1 0 0 Aug14 ? 00:00:07 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 Aug14 ? 00:00:00 [kthreadd] root 4 2 0 Aug14 ? 00:00:00 [kworker/0:0H] [tt@ecs-centos-7 ~]$ ps -fe | more UID PID PPID C STIME TTY TIME CMD root 1 0 0 Aug14 ? 00:00:07 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 Aug14 ? 00:00:00 [kthreadd] root 4 2 0 Aug14 ? 00:00:00 [kworker/0:0H]
列說明:code
UID: 進程所屬的用戶 PID: 進程ID PPID: 進程的父進程ID C: 同 %CPU,進程CPU利用率 STIME: 進程啓動的日期 TTY: 進程相關的終端 TIME: 進程佔用的總CPU時間 CMD: 進程啓動命令以及參數
-f
或 -F
選項:全格式列表選項,這個選項和其餘UNIX風格的選項組合使用能夠使得結果多出一些列blog
上面例子中 -A
和 -e
選項都是查看全部運行的進程信息的,後面重定向到 more
命令是爲了分頁查看結果進程
-u、-U、U、--user、--User
這幾個選項後面接用戶名列表(用戶名之間用逗號分隔) 或用戶ID列表(ID之間用逗號分隔) , 能夠查看指定用戶列表中用戶的進程
[root@ecs-centos-7 ~]# ps -u tt PID TTY TIME CMD 13087 pts/8 00:00:00 bash 13257 pts/9 00:00:00 bash [root@ecs-centos-7 ~]# ps -u wl PID TTY TIME CMD 13275 pts/11 00:00:00 bash 13294 pts/11 00:00:00 top [root@ecs-centos-7 ~]# ps -u tt,wl PID TTY TIME CMD 13087 pts/8 00:00:00 bash 13257 pts/9 00:00:00 bash 13275 pts/11 00:00:00 bash 13294 pts/11 00:00:00 top
上面例子中分別查看了用戶 tt
和 wl
的進程,用戶列表tt,wl
的進程其實是列表中每一個用戶的進程組合
[root@ecs-centos-7 ~]# id tt uid=1003(tt) gid=1003(tt) groups=1003(tt) [root@ecs-centos-7 ~]# id wl uid=1000(wl) gid=1000(wl) groups=1000(wl) [root@ecs-centos-7 ~]# ps -u 1003 PID TTY TIME CMD 13087 pts/8 00:00:00 bash 13257 pts/9 00:00:00 bash [root@ecs-centos-7 ~]# ps -u 1000 PID TTY TIME CMD 13275 pts/11 00:00:00 bash 13294 pts/11 00:00:00 top [root@ecs-centos-7 ~]# ps -u 1003,1000 PID TTY TIME CMD 13087 pts/8 00:00:00 bash 13257 pts/9 00:00:00 bash 13275 pts/11 00:00:00 bash 13294 pts/11 00:00:00 top
上面例子中分別按照用戶tt
和wl
的用戶ID 查看進程, 用戶ID列表1003,1000
的進程其實是列表中每一個用戶ID的進程組合
ps p 進程ID
、ps -p 進程ID
、ps --pid 進程ID
這三種方式均可以查看指定進程ID的進程信息
[root@ecs-centos-7 ~]# ps -p 1,2,4 PID TTY TIME CMD 1 ? 00:00:07 systemd 2 ? 00:00:00 kthreadd 4 ? 00:00:00 kworker/0:0H
上面例子中查看進程ID分別爲 1,2,4
的進程信息,使用 ps p 1,2,4
命令或者 ps --pid 1,2,4
命令也能夠獲得和例子中同樣的結果
知道了進程ID,能夠經過 ps -fL -p 進程ID
命令查看指定進程的線程信息
[root@ecs-centos-7 ~]# ps -fL -p 842 UID PID PPID LWP C NLWP STIME TTY TIME CMD mysql 842 1 842 0 27 Aug14 ? 00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid mysql 842 1 1043 0 27 Aug14 ? 00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid mysql 842 1 1061 0 27 Aug14 ? 00:00:37 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
線程相關字段說明:
LWP: 線程ID NLWP: 線程數量
上面的例子查看進程ID爲842的進程(MySQL進程)的線程信息,因爲輸出信息太多,這裏只截取了一部分,從結果能夠看出,MySQL進程有27個線程,其中 PID
和 LWP
值相同的是主線程
在服務器開發中,關閉服務器進程的時候,一般都須要根據進程名字取得進程ID,而後再利用 kill 命令向指定進程ID發送終止信號
[root@ecs-centos-7 ~]# ps aux | grep mysql | grep -v grep | awk '{print $2}' 842
上面的例子中,ps aux
是查找全部用戶運行的進程,grep mysql
是從前面查找的結果中過濾出含有mysql
的關鍵字,grep -v grep
是從上一步的結果中進一步去掉含有 grep
的關鍵字,最後 awk '{print $2}
是輸出最終結果中第二列的值,也即MySQL的進程ID
注意:ps命令查找的結果中程序啓動命令以及參數(CMD列)最多隻能顯示15個字符寬度,若是應用程序名字查過15字符長度,就會被截斷,此時用 grep 查找應用程序名字的話會出現找不到應用程序的狀況。關於這個問題請參考 ps 命令顯示不完整的問題
在對 Linux 系統中問題進行故障排除的過程當中,ps命令是經常使用的命令之一,它有不少的選項,可是大多數時候都在使用 ps aux
或者 ps -ef
命令查看正在運行進程的信息
有關 ps 命令更多選項能夠經過 man ps
命令查看