鍍金池/ 教程/ Linux/ ps 進(jìn)程查看器
進(jìn)程管理工具
objdump 二進(jìn)制文件分析
scp 跨機(jī)遠(yuǎn)程拷貝
crontab 定時(shí)任務(wù)
readelf elf文件格式分析
pstack 跟蹤進(jìn)程棧
系統(tǒng)管理及IPC資源管理
vmstat 監(jiān)視內(nèi)存使用情況
strace 跟蹤進(jìn)程中的系統(tǒng)調(diào)用
sar 找出系統(tǒng)瓶頸的利器
ipcs 查詢進(jìn)程間通信狀態(tài)
ps 進(jìn)程查看器
性能優(yōu)化
wget 文件下載
top linux下的任務(wù)管理器
磁盤管理
size 查看程序內(nèi)存映像大小
free 查詢可用內(nèi)存
文件及目錄管理
iostat 監(jiān)視I/O子系統(tǒng)
性能監(jiān)控
程序構(gòu)建
學(xué)會(huì)使用命令幫助
gdb 調(diào)試?yán)?/span>
網(wǎng)絡(luò)工具
nm 目標(biāo)文件格式分析
lsof 一切皆文件
用戶管理工具
程序調(diào)試
ldd 查看程序依賴庫(kù)
文本處理

ps 進(jìn)程查看器

Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統(tǒng)中當(dāng)前運(yùn)行的那些進(jìn)程。ps命令列出的是當(dāng)前那些進(jìn)程的快照,就是執(zhí)行ps命令的那個(gè)時(shí)刻的那些進(jìn)程,如果想要?jiǎng)討B(tài)的顯示進(jìn)程信息,就可以使用top命令。

要對(duì)進(jìn)程進(jìn)行監(jiān)測(cè)和控制,首先必須要了解當(dāng)前進(jìn)程的情況,也就是需要查看當(dāng)前進(jìn)程,而 ps 命令就是最基本同時(shí)也是非常強(qiáng)大的進(jìn)程查看命令。使用該命令可以確定有哪些進(jìn)程正在運(yùn)行和運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、進(jìn)程有沒有僵死、哪些進(jìn)程占用了過多的資源等等??傊蟛糠中畔⒍际强梢酝ㄟ^執(zhí)行該命令得到的。

ps 為我們提供了進(jìn)程的一次性的查看,它所提供的查看結(jié)果并不動(dòng)態(tài)連續(xù)的;如果想對(duì)進(jìn)程時(shí)間監(jiān)控,應(yīng)該用 :ref:top 工具。

注:kill 命令用于殺死進(jìn)程。

linux上進(jìn)程有5種狀態(tài):

  1. 運(yùn)行(正在運(yùn)行或在運(yùn)行隊(duì)列中等待)
  2. 中斷(休眠中, 受阻, 在等待某個(gè)條件的形成或接受到信號(hào))
  3. 不可中斷(收到信號(hào)不喚醒和不可運(yùn)行, 進(jìn)程必須等待直到有中斷發(fā)生)
  4. 僵死(進(jìn)程已終止, 但進(jìn)程描述符存在, 直到父進(jìn)程調(diào)用wait4()系統(tǒng)調(diào)用后釋放)
  5. 停止(進(jìn)程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號(hào)后停止運(yùn)行運(yùn)行)

ps工具標(biāo)識(shí)進(jìn)程的5種狀態(tài)碼:

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

命令參數(shù)

  • a 顯示所有進(jìn)程
  • -a 顯示同一終端下的所有程序
  • -A 顯示所有進(jìn)程
  • c 顯示進(jìn)程的真實(shí)名稱
  • -N 反向選擇
  • -e 等于“-A”
  • e 顯示環(huán)境變量
  • f 顯示程序間的關(guān)系
  • -H 顯示樹狀結(jié)構(gòu)
  • r 顯示當(dāng)前終端的進(jìn)程
  • T 顯示當(dāng)前終端的所有程序
  • u 指定用戶的所有進(jìn)程
  • -au 顯示較詳細(xì)的資訊
  • -aux 顯示所有包含其他使用者的行程
  • -C<命令> 列出指定命令的狀況
  • --lines<行數(shù)> 每頁(yè)顯示的行數(shù)
  • --width<字符數(shù)> 每頁(yè)顯示的字符數(shù)
  • --help 顯示幫助信息
  • --version 顯示版本顯示

輸出列的含義

  • F 代表這個(gè)程序的旗標(biāo) (flag), 4 代表使用者為 super user
  • S 代表這個(gè)程序的狀態(tài) (STAT),關(guān)于各 STAT 的意義將在內(nèi)文介紹
  • UID 程序被該 UID 所擁有
  • PID 進(jìn)程的ID
  • PPID 則是其上級(jí)父程序的ID
  • C CPU 使用的資源百分比
  • PRI 這個(gè)是 Priority (優(yōu)先執(zhí)行序) 的縮寫,詳細(xì)后面介紹
  • NI 這個(gè)是 Nice 值,在下一小節(jié)我們會(huì)持續(xù)介紹
  • ADDR 這個(gè)是 kernel function,指出該程序在內(nèi)存的那個(gè)部分。如果是個(gè) running的程序,一般就是 "-"
  • SZ 使用掉的內(nèi)存大小
  • WCHAN 目前這個(gè)程序是否正在運(yùn)作當(dāng)中,若為 - 表示正在運(yùn)作
  • TTY 登入者的終端機(jī)位置
  • TIME 使用掉的 CPU 時(shí)間。
  • CMD 所下達(dá)的指令為何

使用實(shí)例

實(shí)例1:顯示所有進(jìn)程信息

[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
……省略部分結(jié)果

實(shí)例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
……省略部分結(jié)果

實(shí)例3:顯示所有進(jìn)程信息,連同命令行

[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]

實(shí)例4: ps 與grep 組合使用,查找特定進(jìn)程

[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

實(shí)例5:將與這次登入的 PID 與相關(guān)信息列示出來

[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

實(shí)例6:列出目前所有的正在內(nèi)存中的程序

[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]