linux包之procps之ps與top


概述  閱讀man ps頁,與man top頁,最權威與標准,也清楚

 

概念

英語

命令

ps

top

slabtop

pidof

=========================================

有時候系統管理員可能只關心現在系統中運行着哪些程序,而不想知道有哪些進程在運行。由於一個應用程序可能需要啟動多個進程。所以在同等情況下,進程的數量要比程序多的多。使用ps可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等。

ps中的session leader引發的搜索與思考

在第 1 節 “信號的基本概念”
中我說過“Shell可以同時運行一個前台進程和任意多個后台進程”其實是不全面的,現在我們來研究更復雜的情況。事實上,Shell分前后台來控制的不是進程而是作業(Job)或者進程組(Process Group)。一個前台作業可以由多個進程組成,一個后台作業也可以由多個進程組成,Shell可以同時運行一個前台作業和任意多個后台作業,這稱為作業控制(Job Control)。例如用以下命令啟動5個進程:
$ proc1 | proc2 &
$ proc3 | proc4 | proc5
其中proc1和proc2屬於同一個后台進程組,proc3、proc4、proc5屬於同一個前台進程組,Shell進程本身屬於一個單獨的進程組。這些進程組的控制終端相同,它們屬於同一個Session。當用戶在控制終端輸入特殊的控制鍵(例如Ctrl-C) 時,內核會發送相應的信號(例如SIGINT)給前台進程組的所有進程。各進程、進程組、Session的關系如下圖所示

 

http://blog.chinaunix.net/uid-25681671-id-3201927.html  Linux下PS命令詳解


http://blog.csdn.net/jibcy/article/details/7368611    Session與進程組
http://blog.csdn.net/jibcy/article/details/7357301    unix 進程組 會話期 作業控制
在UNIX系統中,作業控制允許在一個終端上啟動多個作業(進程組),控制哪一個作業可以存取該終端,以及哪些作業在后台運行。
為了支持作業控制,引入了進程組,會話期,控制終端等概念,還需要內核以一定的信號支持。
一·進程組。
每一個進程除了有一個進程PID之外,還屬於一個進程組,用進程組ID表示。返回當前進程組ID的系統調用為:
二·對話期(session)
對話期是一個或多個進程組的集合,對話期可以有一個控制終端。
三。前台進程組,后台進程組
一個對話期的幾個進程組可以被分成一個前台進程組以及一個或幾個后台進程組。
如果一個對話期有一個控制終端,那么它有一個前台進程組,其他進程組為后台進程組。
無論何時鍵入中斷鍵(Ctrl-C)或者退出鍵(Ctrl-\),就會造成中斷信號SIGINT或者退出信號SITQUIT送至前台進程組中的所有進程。
只有前台進程組中的進程可以接受終端輸入,如果后台進程組的進程試圖讀終端,那么內核會發送一個特定的信號SIGTTIN給后台作業,這通常會停止(掛起)次后台作業。當用將次后台進程轉為前台進程后(移入前台進程組),會發送一個SIGCONT信號給該進程,使該進程繼續運行。

-A 顯示所有進程(等價於-e)(utility)
-a 顯示一個終端的所有進程,除了會話引線
ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。

最常用的方法是ps -aux,然后再利用一個管道符號導向到grep去查找特定的進程,然后再對特定的進程進行操作。

ps aux的顯示來觀察auditd的啟動優先級
root 3318 0.0 0.0 12516 764 ? S<sl Mar25 0:00 auditd
S<sl S表示進程正在睡眠,<表示具有較高的優先級,s表示多進程,l表示多線程

ps和top的區別
ps看到的是命令執行瞬間的進程信息,而top可以持續的監視
ps只是查看進程,而top還可以監視系統性能,如平均負載,cpu和內存的消耗
另外top還可以操作進程,如改變優先級(命令r)和關閉進程(命令k)

linux上進程有5種狀態:
1. 運行(正在運行或在運行隊列中等待)
2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)
3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生)
4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用后釋放)
5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行運行)

1)ps a 顯示現行終端機下的所有程序,包括其他用戶的程序。
2)ps -A 顯示所有程序。
3)ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。
4)ps -e 此參數的效果和指定"A"參數相同。
5)ps e 列出程序時,顯示每個程序所使用的環境變量。
6)ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關系。
7)ps -H 顯示樹狀結構,表示程序間的相互關系。
8)ps -N 顯示所有的程序,除了執行ps指令終端機下的程序之外。
9)ps s 采用程序信號的格式顯示程序狀況。
10)ps S 列出程序時,包括已中斷的子程序資料。
11)ps -t <終端機編號>  指定終端機編號,並列出屬於該終端機的程序的狀況。
12)ps u   以用戶為主的格式來顯示程序狀況。
13)ps x   顯示所有程序,不以終端機來區分。
14)ps -l 較長,較詳細的顯示該PID的信息

解釋

[root@CentOS5 ~]# ps aux|grep D

# ps -lA |more
相關信息的意義:
F 進程的標誌(flag),4表示用戶為超級用戶
S 進程的狀態(stat),各STAT的意義見下文
C CPU使用資源的百分比
PRI priority(優先級)的縮寫,
NI Nice值,
ADDR 核心功能,指出該進程在內存的那一部分,如果是運行的進程,一般都是“-”
SZ 用掉的內存的大小
WCHAN 當前進程是否正在運行,若為“-”表示正在運行

NI 進程的NICE值,數值大,表示較少占用CPU時間;
TIME 進程使用的總cpu時間
VSZ 進程所使用的虛存的大小(Virtual Size)
RSS 進程使用的駐留集大小或者是實際內存的大小,Kbytes字節

# ps aux |more
USER 進程的屬主;
PID 進程的ID;
PPID 父進程;
%CPU 進程占用的CPU百分比;
%MEM 占用內存的百分比;
NI 進程的NICE值,數值大,表示較少占用CPU時間;
VSZ 該進程使用的虛擬內存量(KB);
RSS 該進程占用的固定內存量(KB)(駐留中頁的數量);
TTY 該進程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。若為pts/0等,則表示由網絡連接主機進程
WCHAN 當前進程是否正在進行,若為-表示正在進行;
START 該進程被觸發啟動時間;
TIME 該進程實際使用CPU運行的時間;
COMMAND 命令的名稱和參數;

STAT 進程的狀態:進程狀態使用字符表示的(STAT的狀態碼)

R 運行 Runnable (on run queue) 正在運行或在運行隊列中等待。
S 睡眠 Sleeping 休眠中, 受阻, 在等待某個條件的形成或接受到信號。
I 空閑 Idle
Z 僵死 Zombie(a defunct process) 進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用后釋放。
D 不可中斷 Uninterruptible sleep (ususally IO) 收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生。
D 無法中斷的休眠狀態(通常 IO 的進程);
T 終止 Terminate 進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行運行。
P 等待交換頁
W 無駐留頁 has no resident pages 沒有足夠的記憶體分頁可分配。
X 死掉的進程
< 高優先級進程 高優先序的進程
N 低優先級進程 低優先序的進程
L 內存鎖頁 Lock 有記憶體分頁分配並縮在記憶體內
s 進程的領導者(在它之下有子進程);
l 多進程的(使用 CLONE_THREAD, 類似 NPTL pthreads)
+ 位於后台的進程組

 

==================================================

TIME  --  CPU Time
Total CPU time the task has used since it started.  
When ’Cumulative mode’ is On, each process is listed with the cpu time that it and its dead children  has  used.  
You toggle ’Cumulative mode’ with ’S’, which is a command-line option and an interactive command.  See the ’S’ interactive command for additional information regarding this mode.

TIME+  --  CPU Time, hundredths
The same as ’TIME’, but reflecting more granularity through hundredths of a second.

granularity    粒度
hundredths of a second    百分之一秒

================================================

樣例:
查看當前系統進程的uid,pid,stat,pri, 以uid號排序.
ps -eo pid,stat,pri,uid --sort uid
查看當前系統進程的user,pid,stat,rss,args, 以rss排序.
ps -eo user,pid,stat,rss,args --sort rss

可以用下面命令查看進程狀態
ps -aux
列出類似程序樹的程序顯示(顯示進程下有哪些子進程)
ps -axjf
找出與 cron 與 syslog 這兩個服務有關的 PID 號碼
ps aux | egrep '(cron|syslog)'
也可以這樣使用ps格式輸出來查看進程狀態:
ps -eo user,stat..,cmd

查看當前系統進程的uid,pid,stat,pri, 以uid號排序.
ps -eo pid,stat,pri,uid --sort uid
查看當前系統進程的user,pid,stat,rss,args, 以rss排序.
ps -eo user,pid,stat,rss,args --sort rss

在Linux下,還有一種方法檢查某個進程是否存在,利用/proc文件系統. /proc/pid/stat里面有進程的狀態,進程可執行文件名等.如果該文件不存在了,那進程肯定退出了.如果存在,可以檢查狀態和文件名是否正確.效率可能比PS還是高一些,因為/proc是虛擬文件系統,存在與內存中.
如何利用/proc文件系統
cat /proc/pid/status
這里pid是你的進程ID,看看輸出結果,有一欄是State

- When the process that dies is the session leader of a session that is
attached to a terminal device, SIGHUP is sent to all processes in
the foreground process group of that terminal device.
- When the death of a process causes a process group to become orphaned,
and one or more processes in the orphaned group are stopped, then
SIGHUP and SIGCONT are sent to all members of the orphaned
group. (An orphaned process group is one where no process in the group
has a parent which is part of the same session, but not the same process
group.)

ref: http://www.unixguide.net/unix/programming/1.15.shtml
《UNIX環境高級編程》第十章說:“如果對話期首進程(session leader)終止,則也產生SIGHUP。此信號被發送給該對話期前台進程組中的每一個進程。”
對這個不少人可能有疑問,而實際上,上文應該少說了一個條件:即session leader必須還有一個控制終端(CTTY)。

[root@109-com1 ~]# ps  -eLo pid,lwp,pcpu | grep 11167

-e與-A是一樣的
[root@250-shiyan ~]# ps -e >pse
[root@250-shiyan ~]# ps -A >psa
[root@250-shiyan ~]# diff pse psa
75c75
<  7761 pts/1    00:00:00 ps
---
>  7762 pts/1    00:00:00 ps
本終端的進程除外
[root@250-shiyan ~]# ps -N
[root@250-shiyan ~]# ps T
  PID TTY      STAT   TIME COMMAND
 7657 pts/1    Ss     0:00 -bash
 7784 pts/1    R+     0:00 ps T

[root@250-shiyan ~]# ps a
  PID TTY      STAT   TIME COMMAND
 1143 tty1     Ss+    0:00 /sbin/mingetty /dev/tty1
 1145 tty2     Ss+    0:00 /sbin/mingetty /dev/tty2
 1147 tty3     Ss+    0:00 /sbin/mingetty /dev/tty3
 1149 tty4     Ss+    0:00 /sbin/mingetty /dev/tty4
 1151 tty5     Ss+    0:00 /sbin/mingetty /dev/tty5
 1153 tty6     Ss+    0:00 /sbin/mingetty /dev/tty6
 3636 pts/0    Ss+    0:00 -bash
 7657 pts/1    Ss     0:00 -bash
 8372 pts/1    R+     0:00 ps a
[root@250-shiyan ~]# ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1143  0.0  0.1   4064   572 tty1     Ss+  Jan13   0:00 /sbin/mingetty /dev/tty1
root      1145  0.0  0.1   4064   572 tty2     Ss+  Jan13   0:00 /sbin/mingetty /dev/tty2
root      1147  0.0  0.1   4064   568 tty3     Ss+  Jan13   0:00 /sbin/mingetty /dev/tty3
root      1149  0.0  0.1   4064   568 tty4     Ss+  Jan13   0:00 /sbin/mingetty /dev/tty4
root      1151  0.0  0.1   4064   572 tty5     Ss+  Jan13   0:00 /sbin/mingetty /dev/tty5
root      1153  0.0  0.1   4064   572 tty6     Ss+  Jan13   0:00 /sbin/mingetty /dev/tty6
root      3636  0.0  0.9 111176  4912 pts/0    Ss+  Mar12   0:00 -bash
root      7657  0.0  0.9 111176  4812 pts/1    Ss   Mar16   0:00 -bash
root      8375  0.0  0.2 110236  1168 pts/1    R+   10:20   0:00 ps u
[root@250-shiyan ~]# ps v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 1143 tty1     Ss+    0:00      0    11  4052   572  0.1 /sbin/mingetty /dev/tty1
 1145 tty2     Ss+    0:00      0    11  4052   572  0.1 /sbin/mingetty /dev/tty2
 1147 tty3     Ss+    0:00      0    11  4052   568  0.1 /sbin/mingetty /dev/tty3
 1149 tty4     Ss+    0:00      0    11  4052   568  0.1 /sbin/mingetty /dev/tty4
 1151 tty5     Ss+    0:00      0    11  4052   572  0.1 /sbin/mingetty /dev/tty5
 1153 tty6     Ss+    0:00      0    11  4052   572  0.1 /sbin/mingetty /dev/tty6
 3636 pts/0    Ss+    0:00      0   845 110330 4912  0.9 -bash
 7657 pts/1    Ss     0:00      0   845 110330 4812  0.9 -bash
 8379 pts/1    R+     0:00      0    76 108051 1036  0.2 ps v
[root@250-shiyan ~]# ps -o rss,pid,vsz,cmd
  RSS   PID    VSZ CMD
 4812  7657 111176 -bash
 1036  8370 108128 ps -o rss,pid,vsz,cmd
[root@84-monitor monitor]# ps -O sid,vsz
  PID   SID    VSZ S TTY          TIME COMMAND
 7684 12642 108096 R pts/3    00:00:00 ps -O sid,vsz
12642 12642 108432 S pts/3    00:00:00 -bash
[root@84-monitor monitor]# ps  -ww -f 13691
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root     13691     1  0 Feb26 ?        Sl    54:36 /usr/local/jdk1.6//bin/java -Djava.util.logging.config.file=/var/www/html/apache-tomcat-6.0.41/apache-tomcat-6.0.41/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/var/www/html/apache-tomcat-6.0.41/apache-tomcat-6.0.41/endorsed -classpath /var/www/html/apache-tomcat-6.0.41/apache-tomcat-6.0.41/bin/bootstrap.jar -Dcatalina.base=/var/www/html/apache-tomcat-6.0.41/apache-tomcat-6.0.41 -Dcatalina.home=/var/www/html/apache-tomcat-6.0.41/apache-tomcat-6.0.41 -Djava.io.tmpdir=/var/www/html/apache-tomcat-6.0.41/apache-tomcat-6.0.41/temp org.apache.catalina.startup.Bootstrap start
[root@84-monitor monitor]# ps -fp 16213,8761
UID        PID  PPID  C STIME TTY          TIME CMD
root      8761  8760  0 Feb03 ?        00:00:00 /usr/sbin/postdrop -r
apache   16213 27245  0 Mar15 ?        00:00:00 /usr/sbin/httpd
[root@84-monitor monitor]# ps -fp "4083 7277" -fp 16213,8761
UID        PID  PPID  C STIME TTY          TIME CMD
postfix   4083  1251  0 13:43 ?        00:00:00 pickup -l -t fifo -u
root      7277 11415  0 Feb03 ?        00:00:00 CROND
root      8761  8760  0 Feb03 ?        00:00:00 /usr/sbin/postdrop -r
apache   16213 27245  0 Mar15 ?        00:00:00 /usr/sbin/httpd
[root@84-monitor monitor]# ps X
  PID   STACKP      ESP      EIP TMOUT ALARM STAT TTY        TIME COMMAND
 1282 82161fb0 82161e88 0683b4c0     -     - Ss+  tty1       0:00 /sbin/mingetty /dev/tty1
 1284 a21c4fb0 a21c4e88 4f87b4c0     -     - Ss+  tty2       0:00 /sbin/mingetty /dev/tty2
 1286 653d3a10 653d38e8 f4d6b4c0     -     - Ss+  tty3       0:00 /sbin/mingetty /dev/tty3
 1289 22ec1380 22ec1258 3b3334c0     -     - Ss+  tty4       0:00 /sbin/mingetty /dev/tty4
 1293 a024df80 a024de58 f77eb4c0     -     - Ss+  tty5       0:00 /sbin/mingetty /dev/tty5
[root@84-monitor monitor]# ps j
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1  1282  1282  1282 tty1      1282 Ss+      0   0:00 /sbin/mingetty /dev/tty1
    1  1284  1284  1284 tty2      1284 Ss+      0   0:00 /sbin/mingetty /dev/tty2
    1  1286  1286  1286 tty3      1286 Ss+      0   0:00 /sbin/mingetty /dev/tty3
    1  1289  1289  1289 tty4      1289 Ss+      0   0:00 /sbin/mingetty /dev/tty4
    1  1293  1293  1293 tty5      1293 Ss+      0   0:00 /sbin/mingetty /dev/tty5
[root@84-monitor monitor]# ps s
  UID   PID          PENDING          BLOCKED          IGNORED           CAUGHT STAT TTY        TIME COMMAND
    0  1282 0000000000000000 0000000000000000 0000000000000000 0000000000000000 Ss+  tty1       0:00 /sbin/mingetty /dev/tty1
    0  1284 0000000000000000 0000000000000000 0000000000000000 0000000000000000 Ss+  tty2       0:00 /sbin/mingetty /dev/tty2
    0  1286 0000000000000000 0000000000000000 0000000000000000 0000000000000000 Ss+  tty3       0:00 /sbin/mingetty /dev/tty3
[root@84-monitor monitor]# ps -yl
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
R     0  9619 12642  0  80   0   936 27023 -      pts/3    00:00:00 ps
S     0 12642 12638  0  80   0  2000 27108 wait   pts/3    00:00:00 bash

 

===============================================

15:50:33 7 ~:#man top

top詳解

top界面介紹

摘要區域  summary area

任務區域  task area

主界面按數字1如果有多個cpu核心,逐個顯示

主界面按字母l第一行開關,t接下來兩行開關,m內存兩行開關

ALTERNATE-DISPLAY Mode  輪流顯示模式  通過A(shift+a)同時顯示4個字段組,分別是1-def,2-job,3-mem,4-usr。用a或w來進行選擇,選中之后,-/+進行關閉或打開,可獨立關閉某一個字段組

full-screen mode  全屏模式  整個屏幕代表單個窗口,但是可以更改成4個不同的字段組filed groups,通過G(shift+g)交互式命令來選擇1,2,3,4。

FIELDS / Columns

f或o交互命令,’f’ (Fields select) or ´o’ (Order fields)

 

top命令
字段解釋:
  PID:進程的ID
  USER:進程所有者
  PR:進程的優先級別,越小越優先被執行
  NInice:值
  VIRT:進程占用的虛擬內存
  RES:進程占用的物理內存
  SHR:進程使用的共享內存
  S:進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值為負數
  %CPU:進程占用CPU的使用率
  %MEM:進程使用的物理內存和總內存的百分比
  TIME+:該進程啟動后占用的總的CPU時間,即占用CPU使用時間的累加值。
  COMMAND:進程啟動命令名稱
  
子命令:
  P:按%CPU使用率排行
  T:按TIME+排行
  M:按%MEM排行
字段:
   f 選擇字段  選擇顯示列:執行top命令后,按 f 鍵,再按某一列的代表字母,即可選中或取消顯示;
   o 排序字段  列顯示位置調整:執行top命令后,按 o 鍵,選擇要調整位置的列(如K:CUP Usageage),按動一下大寫K則顯示位置往上調整,按動一下小寫K則顯示位置往下調整。
   F或者O 列排序   執行top命令后,按 shift + f(小寫)或o(小寫),二者等同。進入選擇排序列頁面,再按要排序的列的代表字母即可;
   排序,默認是按cpu排序,>左移一列排序,shift+r反向,<右移一列排序。

只顯示asterisk及其線程的top顯示。
top -H -p `pidof asterisk`

 

 

centos7-top
%MEM  --  Memory Usage (RES)
           A task's currently used share of available physical memory.
CODE  --  Code Size (KiB)
           The amount of physical memory devoted to executable code, also known as  the  Text  Resident  Set
           size or TRS.
DATA  --  Data + Stack Size (KiB)
           The amount of physical memory devoted to other than executable code, also known as the Data Resi‐
           dent Set size or DRS.
VIRT  --  Virtual Memory Size (KiB)
           The  total  amount  of  virtual  memory  used by the task.  It includes all code, data and shared
           libraries plus pages that have been swapped out and pages that have been mapped but not used.
SWAP  --  Swapped Size (KiB)
           The non-resident portion of a task's address space.
RES  --  Resident Memory Size (KiB)
           The non-swapped physical memory a task is using.
SHR  --  Shared Memory Size (KiB)
           The amount of shared memory available to a task, not all of which is typically resident.  It sim‐
           ply reflects memory that could be potentially shared with other processes.

centos6-top
%MEM  --  Memory usage (RES)
          A task’s currently used share of available physical memory.
CODE  --  Code size (kb)
          The amount of physical memory devoted to executable code, also known as the  ’text  resi-
          dent set’ size or TRS.
DATA  --  Data+Stack size (kb)
          The  amount  of  physical memory devoted to other than executable code, also known as the
          ’data resident set’ size or DRS.
VIRT  --  Virtual Image (kb)
          The  total  amount  of  virtual  memory used by the task.  It includes all code, data and
          shared libraries plus pages that have been swapped out. (Note: you can define  the  STAT-
          SIZE=1 environment variable and the VIRT will be calculated from the /proc/#/state VmSize
          field.)

          VIRT = SWAP + RES.
SWAP  --  Swapped size (kb)
          The swapped out portion of a task’s total virtual memory image.
RES  --  Resident size (kb)
          The non-swapped physical memory a task has used.

          RES = CODE + DATA.
SHR  --  Shared Mem size (kb)
          The amount of shared memory used by a task.  It simply  reflects  memory  that  could  be
          potentially shared with other processes.

 

====================================================

[root@cu-dbs-154 ~]# rpm -qf /usr/bin/slabtop
procps-3.2.8-36.el6.x86_64

slabtop

       default sort criteria is to sort by the number of objects ("o").
       The sort criteria can also be changed while slabtop is running by pressing the associated character.
       a:     sort by number of active objects
       b:     sort by objects per slab
       c:     sort by cache size
       l:     sort by number of slabs
       v      sort by number of active slabs
       n:     sort by name
       o:     sort by number of objects
       p:     sort by pages per slab
       s:     sort by object size
       u:     sort by cache utilization


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM