1. 程式人生 > >ps指令詳解

ps指令詳解

rup 啟動 virtual 會話 zomb parent ads threads nbsp

ps aux       #顯示出系統上的全部進程
ps -ef        #顯示出系統上的全部進程,且顯示出PPID一欄
ps -ljF       #僅顯示與本終端上開啟的進程

選項:
-t 終端名稱1 終端名稱2        #指定關聯的多個終端,只會列出指定終端的進程
#/dev/目錄下保存的是系統中所有的設備文件,而在圖形桌面環境下啟動的虛擬終端所對應的設備文件都保存在/dev/pts目錄下。數字l表示第一個啟動的虛擬終端,2表示第二個啟動的虛擬終端,以此類推。
#這裏為選項-t指定了參數/dev/pts/1,說明希望列出所有關聯到虛擬終端l的進程

-p PID1 PID2…          #指定想列出的PID列表,只會列出指定pid的進程
註意:多個PID可以使用空格分開,也可使用逗號分開

-u UID1 UID2… #僅列出指定用戶的進程,可用用戶名替代UID
註意,這裏說的是有效用戶UID或用戶名(Effective User ID or Effective User Name),而不是實際用戶ID或用戶名,兩者是有很大區別的:實際用戶UID或用戶名只是標識了哪個用戶創建了這個進程,而不會指定進程的文件訪問權限;而有效用戶UID或用戶名的意思是進程使用這個用戶的文件訪問權限作為進程本身的文件訪問權限。
對於普通程序來說,有效用戶UID或用戶名與實際用戶UID或用戶名是相同的,只有對那些設置了set-uid的程序來說,有效用戶ID或用戶名才會發生改變,也就是說,實際用戶ID不等於有效用的ID。

-C        可執行文件名稱(ps指令最後一列CMD) 在一個用apache搭建的web服務器上,如何查看系統當前運行的所有apache進程?
例如:ps -C sshd
如果進程的TTY終端項顯示的都是問號?說明這些進程都沒有關聯到任何終端。在Unix/Linux的世界裏,要求所有的"網絡服務進程"都不能關聯到任何一個終端,這裏也驗證了這一點。

其他常用選項:

a      顯示系統中所有用戶的進程。
x      顯示沒有控制終端的進程及後臺進程
r      顯示正在運行的進程
u      以用戶為主的格式來顯示程序狀況

-A      顯示主機上所有進程,等同於-e選項
-e      此參數的效果和指定"A"參數相同。顯示所有進程

e    列出程序時,顯示每個程序所使用的環境變量。
f      用ASCII字符顯示樹狀結構,表達程序間的相互(父子)關系。
-f      全格式顯示(列出進程間父子關系)
-l      按長格式顯示

-L      打印出線程的ID和線程的個數,

-N     顯示所有的程序,除了執行ps指令終端機下的程序之外。
s      采用程序信號的格式顯示程序狀況。
S      列出程序時,包括已中斷的子程序資料。

"-o" 參數表示以用戶自定義的格式輸出
  "psr" 表示當前分配給進程運行的處理器編號
  "lwp" 表示線程的ID,
  "ruser" 表示運行進程的用戶,
  "pid" 表示進程的ID ,
  "ppid " 表示父進程的ID ,
  "args" 表示運行的命令行及其參數

ps -eLo psr,lwp,ruser,pid,ppid,args

-ef或-eF 通常一起使用
aux 通常一起使用,顯示比-ef更全面的信息
這兩個通常可以配合-L 參數使用,將線程及線程個數顯示出來,通常是-eLf 或-eLF 當然也可以 aux -L

[root@kvm ~]# ps |head
PID TTY TIME CMD
27939 pts/0 00:00:00 bash
29031 pts/0 00:02:33 qemu-system-x86
29324 pts/0 00:00:00 ps
29325 pts/0 00:00:00 head

[root@kvm ~]# ps a |head
PID TTY STAT TIME COMMAND
2037 tty1 Ss+ 0:00 /sbin/mingetty /dev/tty1
2039 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2
2041 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3
2043 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4
2045 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5
2047 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6
27939 pts/0 Ss 0:00 -bash
27961 pts/1 Ss+ 0:00 -bash
.....

[root@kvm ~]# ps u |head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2037 0.0 0.0 4068 452 tty1 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty1
root 2039 0.0 0.0 4068 452 tty2 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty2
root 2041 0.0 0.0 4068 452 tty3 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty3
root 2043 0.0 0.0 4068 452 tty4 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty4
root 2045 0.0 0.0 4068 452 tty5 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty5
root 2047 0.0 0.0 4068 452 tty6 Ss+ Jun11 0:00 /sbin/mingetty /dev/tty6
root 27939 0.0 0.0 108360 1836 pts/0 Ss 09:05 0:00 -bash
root 27961 0.0 0.0 108360 1828 pts/1 Ss+ 09:05 0:00 -bash
......

[root@kvm ~]# ps x |head
PID TTY STAT TIME COMMAND
1 ? Ss 0:05 /sbin/init
2 ? S 0:00 [kthreadd]
3 ? S 0:02 [migration/0]
4 ? S 0:02 [ksoftirqd/0]
5 ? S 0:00 [stopper/0]
6 ? S 0:01 [watchdog/0]
7 ? S 0:07 [migration/1]
8 ? S 0:00 [stopper/1]
9 ? S 0:03 [ksoftirqd/1]
.......

[root@kvm ~]# ps aux |head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19368 1060 ? Ss Jun11 0:05 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun11 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jun11 0:02 [migration/0]
root 4 0.0 0.0 0 0 ? S Jun11 0:02 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S Jun11 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S Jun11 0:01 [watchdog/0]
root 7 0.0 0.0 0 0 ? S Jun11 0:07 [migration/1]
root 8 0.0 0.0 0 0 ? S Jun11 0:00 [stopper/1]
root 9 0.0 0.0 0 0 ? S Jun11 0:03 [ksoftirqd/1]

[root@kvm ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun11 ? 00:00:05 /sbin/init
root 2 0 0 Jun11 ? 00:00:00 [kthreadd]
root 3 2 0 Jun11 ? 00:00:02 [migration/0]


C        #占用的CPU百分比
STIME      #程序啟動時間

USER      #用戶名

UID        #用戶ID(User ID)
PID        進程ID(Process ID)
PPID         父進程的進程ID(Parent Process id)
SID        會話ID(Session id)
LWP        線程號(即線程的pid)
NLWP      線程的個數

PSR       進程使用的處理器,在多處理器上可以體現出來(即進程在哪個CPU上運行)

%CPU        進程的cpu占用率
%MEM        進程的內存占用率
VSZ        進程所使用的虛存的大小(Virtual Size)
SZ        進程用到的swap的量,這是一個粗略計算;
RSS        進程使用的駐留或實際內存的大小,Kbytes字節。
TTY        與進程關聯的終端(tty)值"?"說明該進程與控制終端沒有關聯
STAT        進程的狀態:進程狀態使用字符表示的(STAT的狀態碼)
  R 運行 Runnable (on run queue) 正在運行或在運行隊列中等待。
  S 可中斷的休眠狀態,睡眠 Sleeping 休眠中, 受阻, 在等待某個條件的形成或接受到信號。
  I 空閑 Idle
  Z 僵死 Zombie(a defunct process) 進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放。
  D 不可中斷的休眠狀態,不可中斷 Uninterruptible sleep (ususally IO) 收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生。
  T 終止Terminate(暫停執行), 進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行。
  P 等待交換頁
  W 無駐留頁has no resident pages,即沒有足夠的內存頁面可分配。
  X 死掉的進程
  < 高優先序的進程
  N 低優先序的進程
  L 內存頁面被鎖定
  s 創建回話的進程,進程的領導者(在它之下有子進程);
  l 多線程進程(使用 CLONE_THREAD, 類似 NPTL pthreads)
  + 是一個前臺進程組


START        進程啟動時間和日期
TIME       進程使用的總cpu時間,即進程已經執行的時間
COMMAND      正在執行的命令行命令
NI          優先級(Nice)
PRI          進程優先級編號(Priority)
WCHAN      目前這個程序是否正在運作當中,若為 - 表示正在運作,若進程正在睡眠,則顯示睡眠的內核函數名稱;該函數的名稱是從/root/system.map文件中獲得的。
FLAGS      與進程相關的數字標識

ps指令詳解