進程
ps命令
f 以樹狀結構顯示
u 顯示詳細信息
a 顯示所有進程
-A 顯示所有進程
-u 用戶名 是顯示該用戶下的進程
-l 更多進程詳細信息
例子1. 以樹狀結構顯示root用戶下進程的詳細信息
$ps fu -u root
顯示結果如下
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
cpu占比
內存占比
虛擬內存
駐留內存 root 2615 0.0 0.0 28180 248 ? S 09:07 0:00 /usr/sbin/dnsmasq --conf-file=/var/ root 2545 0.0 0.0 28180 244 ? S 09:07 0:00 /usr/sbin/dnsmasq --conf-file=/var/ root 2484 0.0 0.0 28180 240 ? S 09:07 0:00 /usr/sbin/dnsmasq --conf-file=/var/ root 2 0.0 0.0 0 0 ? S 09:06 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 09:06 0:00 \_ [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 09:06 0:00 \_ [kworker/0:0H] root 7 0.2 0.0 0 0 ? S 09:06 0:13 \_ [rcu_sched] root 8 0.0 0.0 0 0 ? S 09:06 0:00 \_ [rcu_bh] root 9 0.3 0.0 0 0 ? S 09:06 0:15 \_ [rcuos/0] root 10 0.0 0.0 0 0 ? S 09:06 0:00 \_ [rcuob/0] root 11 0.0 0.0 0 0 ? S 09:06 0:00 \_ [migration/0] root 12 0.0 0.0 0 0 ? S 09:06 0:00 \_ [watchdog/0] root 13 0.0 0.0 0 0 ? S 09:06 0:00 \_ [watchdog/1] root 14 0.0 0.0 0 0 ? S 09:06 0:00 \_ [migration/1] root 15 0.0 0.0 0 0 ? S 09:06 0:00 \_ [ksoftirqd/1] root 17 0.0 0.0 0 0 ? S< 09:06 0:00 \_ [kworker/1:0H] root 18 0.0 0.0 0 0 ? S 09:06 0:03 \_ [rcuos/1] root 19 0.0 0.0 0 0 ? S 09:06 0:00 \_ [rcuob/1] root 20 0.0 0.0 0 0 ? S 09:06 0:00 \_ [watchdog/2] root 21 0.0 0.0 0 0 ? S 09:06 0:00 \_ [migration/2] root 22 0.0 0.0 0 0 ? S 09:06 0:00 \_ [ksoftirqd/2] root 24 0.0 0.0 0 0 ? S< 09:06 0:00 \_ [kworker/2:0H] root 25 0.0 0.0 0 0 ? S 09:06 0:02 \_ [rcuos/2] root 26 0.0 0.0 0 0 ? S 09:06 0:00 \_ [rcuob/2] root 27 0.0 0.0 0 0 ? S 09:06 0:00 \_ [watchdog/3] root 28 0.0 0.0 0 0 ? S 09:06 0:00 \_ [migration/3] root 29 0.0 0.0 0 0 ? S 09:06 0:00 \_ [ksoftirqd/3]
例子2:顯示所有用戶的詳細信息
$ps aux
顯示效果如下
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 34304 4772 ? Ss 09:06 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 09:06 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 09:06 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 09:06 0:00 [kworker/0:0H] root 7 0.2 0.0 0 0 ? S 09:06 0:15 [rcu_sched] root 8 0.0 0.0 0 0 ? S 09:06 0:00 [rcu_bh] root 9 0.3 0.0 0 0 ? S 09:06 0:17 [rcuos/0] root 10 0.0 0.0 0 0 ? S 09:06 0:00 [rcuob/0] root 11 0.0 0.0 0 0 ? S 09:06 0:00 [migration/0] root 12 0.0 0.0 0 0 ? S 09:06 0:00 [watchdog/0] root 13 0.0 0.0 0 0 ? S 09:06 0:00 [watchdog/1] root 14 0.0 0.0 0 0 ? S 09:06 0:00 [migration/1] root 15 0.0 0.0 0 0 ? S 09:06 0:00 [ksoftirqd/1] root 17 0.0 0.0 0 0 ? S< 09:06 0:00 [kworker/1:0H] root 18 0.0 0.0 0 0 ? S 09:06 0:03 [rcuos/1] root 19 0.0 0.0 0 0 ? S 09:06 0:00 [rcuob/1]
例子3:顯示,更多詳細信息 -l
$ps -l
顯示效果如下:f
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
標志
狀態(r運行,s睡眠,t終止,z僵尸)
用戶 進程號 父進程
cpu使用
優先權
優先級修正
地址
使用內存
等待的進程資源
終端 運行時間 運行指令
0 S 1000 6311 6303 0 80 0 - 7840 wait pts/0 00:00:00 bash 0 R 1000 6720 6311 0 80 0 - 4537 - pts/0 00:00:00 ps
例子4:查找所需要的信息
$ps aux |grep httpd
顯示如下
$root 10161 0.0 0.0 19892 2356 pts/0 S+ 15:40 0:00 grep --color=auto httpd
?
? top命令
top 運行中可以通過 top 的內部命令對進程的顯示方式進行控制。內部命令如下:
s – 改變畫面更新頻率
l – 關閉或開啟第一部分第一行 top 信息的表示
t – 關閉或開啟第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m – 關閉或開啟第一部分第四行 Mem 和 第五行 Swap 信息的表示
N – 以 PID 的大小的順序排列表示進程列表
P – 以 CPU 占用率大小的順序排列進程列表
M – 以內存占用率大小的順序排列進程列表
h – 顯示幫助
n – 設置在進程列表所顯示進程的數量
q – 退出 top
s – 改變畫面更新周期
例子1:顯示所有進程狀態
$top
顯示內容:
top - 13:33:35 up 4:26, 2 users, load average: 0.55, 0.43, 0.48 ### 當前時間 ,已經運行時間 ,2個用戶 ,負載:三個數字分別為1分鐘,5分鐘,15分鐘采樣。當其數值等于cpu個數則為滿負載。 Tasks: 247 total, 2 running, 245 sleeping, 0 stopped, 0 zombie ### 任務即進程總數247,2個正在運行,245個在沉睡,0個停止,0個僵尸 %Cpu(s): 3.6 us, 1.3 sy, 0.0 ni, 95.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ### 在用戶狀態下占用cpu3.6% ,系統態下1.3%,改變了優先級的進程為0%,cpu空閑95.1%,wa等待輸入輸出為0%, KiB Mem: 16428032 total, 13078560 used, 3349472 free, 332320 buffers ### 物理內存為16G,13G已經使用,3g空閑,用作內核的緩存為3G KiB Swap: 4190204 total, 0 used, 4190204 free. 10133084 cached Mem ### 交換區為4G,使用量為0,4G空閑的交換區,緩沖的的交換區為10GPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ### 進程id,用戶,優先級,優先級1, 虛擬空間,駐留內存(代碼段,數據段),共享內存,狀態,占用cpu,占用內存,運行時間,執行應用 4098 yamin 20 0 1769864 589156 108800 S 7.6 3.6 45:12.75 firefox 4322 yamin 20 0 2745780 138920 79836 S 3.7 0.8 7:57.22 QQ.exe 2808 root 20 0 410220 133188 52304 S 2.7 0.8 12:26.51 Xorg 6233 yamin 20 0 329200 45848 7160 S 2.7 0.3 5:27.95 python2.7 4325 yamin 20 0 9976 7628 1632 S 2.3 0.0 4:45.18 wineserver 3694 yamin 20 0 1633388 144360 89212 S 1.7 0.9 4:24.64 compiz 5706 yamin 20 0 3894544 559548 47376 S 1.3 3.4 4:22.52 java 6303 yamin 20 0 663356 36416 26860 S 1.0 0.2 0:16.91 gnome-terminal 9 root 20 0 0 0 0 S 0.7 0.0 0:55.38 rcuos/0 1777 root 20 0 259504 37460 10544 S 0.7 0.2 0:06.68 ceph-mon 5030 yamin 20 0 1022408 101820 41884 S 0.7 0.6 2:21.92 codeblocks 6247 yamin 20 0 402932 42768 4024 S 0.7 0.3 0:41.54 python2.7 7 root 20 0 0 0 0 R 0.3 0.0 0:47.00 rcu_sched 32 root 20 0 0 0 0 S 0.3 0.0 0:10.10 rcuos/3 1757 root 20 0 4372 1792 1620 S 0.3 0.0 0:18.23 acpid 2116 root 20 0 715652 60996 20256 S 0.3 0.4 0:20.67 ceph-osd 2274 root 20 0 746672 77188 21396 S 0.3 0.5 0:21.78 ceph-osd 2351 root 20 0 745576 78160 21040 S 0.3 0.5 0:21.59 ceph-osd 3622 yamin 20 0 500228 42176 23668 S 0.3 0.3 0:44.21 ibus-ui-gtk3
例子2:top選擇需要顯示的
在執行top命令,按f鍵可以進入列選擇,以下是該命令可以顯示的列信息。在該界面下按空格可以選中或者取消某一列。
* PID = Process Id SID = Session Id nsMNT = MNT namespace I * USER = Effective User nTH = Number of Threa nsNET = NET namespace I * PR = Priority P = Last Used Cpu ( nsPID = PID namespace I * NI = Nice Value TIME = CPU Time nsUSER = USER namespace * VIRT = Virtual Image ( SWAP = Swapped Size (K nsUTS = UTS namespace I * RES = Resident Size ( * CODE = Code Size (KiB) * SHR = Shared Memory ( RUSER = Real User Name * S = Process Status DATA = Data+Stack (KiB * %CPU = CPU Usage nMaj = Major Page Faul * %MEM = Memory Usage (R nMin = Minor Page Faul * TIME+ = CPU Time, hundr nDRT = Dirty Pages Cou * COMMAND = Command Name/Li WCHAN = Sleeping in FunPPID = Parent Process Flags = Task Flags <schUID = Effective User CGROUPS = Control Groups RUID = Real User Id SUPGIDS = Supp Groups IDsSUID = Saved User Id SUPGRPS = Supp Groups NamSUSER = Saved User Name TGID = Thread Group IdGID = Group Id ENVIRON = Environment varGROUP = Group Name vMj = Major Faults dePGRP = Process Group I vMn = Minor Faults deTTY = Controlling Tty USED = Res+Swap Size (TPGID = Tty Process Grp nsIPC = IPC namespace I
進程列意義
?
列名 | 含義 |
PID | 進程id |
PPID | 父進程id |
RUSER | Real user name |
UID | 進程所有者的用戶id |
USER | 進程所有者的用戶名 |
GROUP | 進程所有者的組名 |
TTY | 啟動進程的終端名。不是從終端啟動的進程則顯示為?? |
PR | 優先級 |
NI | nice值。負值表示高優先級,正值表示低優先級 |
P | 最后使用的CPU,僅在多CPU環境下有意義 |
%CPU | 上次更新到現在的CPU時間占用百分比 |
TIME | 進程使用的CPU時間總計,單位秒 |
TIME+ | 進程使用的CPU時間總計,單位1/100秒 |
%MEM | 進程使用的物理內存百分比 |
VIRT | 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES |
SWAP | 進程使用的虛擬內存中,被換出的大小,單位kb。 |
RES | 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA |
CODE | 可執行代碼占用的物理內存大小,單位kb |
DATA | 可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb |
SHR | 共享內存大小,單位kb |
nFLT | 頁面錯誤次數 |
nDRT | 最后一次寫入到現在,被修改過的頁面數。 |
S | 進程狀態。 |
COMMAND | 命令名/命令行 |
WCHAN | 若該進程在睡眠,則顯示睡眠中的系統函數名 |
Flags | 任務標志,參考?sched.h |
例子3:顯示某個進程
$top -p 進程號
例子4:顯示某個進程里面的線程
$top -Hp N ### N為進程號
?
vmstat:查看系統負載
$vmstat
顯示信息
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st
運行 內核緩沖 頁面緩沖 內存進入交換區
等待資源 交換區進內存
交換區 塊設備讀 塊設備寫
空閑 每秒中斷數
上下文切換次數/秒
用戶態運行時間比
核心態運行時間比
cpu空閑比率
cpu等待IO占比
虛擬機時間占比 0 0 0 3317212 339412 10137400 0 0 126 29 485 375 6 2 91 1 0
iostat:查看IO負載
$iostat
pstree:查看進程
$pstree -p N ###N為進程號
?
/proc目錄下查詢
Linux 內核提供了一種通過 /proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制。proc文件系統是一個偽文件系統,它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。
用戶和應用程序可以通過 proc得到系統的信息,并可以改變內核的某些參數。由于系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取proc文件時,proc文件系統是 動態從系統內核讀出所需信息并提交的。下面列出的這些文件或子文件夾,并不是都是在你的系統中存在,這取決于你的內核配置和裝載的模塊。另外,在 /proc下還有三個很重要的目錄:net,scsi和sys。 Sys目錄是可寫的,可以通過它來訪問或修改內核的參數,而net和scsi則依賴于內核配置。例如,如果系統不支持scsi,則scsi 目錄不存在。
除了以上介紹的這些,還有的是一些以數字命名的目錄,它們是進程目錄。系統中當前運行的每一個進程都有對應的一個目錄在/proc下,以進程的 PID號為目錄名,它們是讀取進程信息的接口。而self目錄則是讀取進程本身的信息接口,是一個link。
例子1:可以使用cat /proc/xxx,顯示相應信息。
?
/proc/buddyinfo ###每個內存區中的每個order有多少塊可用,和內存碎片問題有關/proc/cmdline ###啟動時傳遞給kernel的參數信息/proc/cpuinfo ###cpu的信息,physical為物理CPU,cpu cores為物理cpu中的核心,而processor為邏輯cpu,例如開了超線程,可能會出現4個核心,8個邏輯cpu;siblings>cpu cores 則開了超線程/proc/crypto ###內核使用的所有已安裝的加密密碼及細節/proc/devices ###已經加載的設備并分類/proc/dma ###已注冊使用的ISA DMA頻道列表/proc/execdomains ###Linux內核當前支持的execution domains/proc/fb ###幀緩沖設備列表,包括數量和控制它的驅動/proc/filesystems ###內核當前支持的文件系統類型/proc/interrupts ###x86架構中的每個IRQ中斷數/proc/iomem ###每個物理設備當前在系統內存中的映射/proc/ioports ###一個設備的輸入輸出所使用的注冊端口范圍/proc/kcore ###代表系統的物理內存,存儲為核心文件格式,里邊顯示的是字節數,等于RAM大小加上4kb/proc/kmsg ###記錄內核生成的信息,可以通過/sbin/klogd或/bin/dmesg來處理/proc/loadavg ###根據過去一段時間內CPU和IO的狀態得出的負載狀態,與uptime命令有關 /proc/locks ###內核鎖住的文件列表/proc/mdstat ###多硬盤,RAID配置信息(md=multiple disks)/proc/meminfo ###RAM使用的相關信息/proc/misc ###其他的主要設備(設備號為10)上注冊的驅動/proc/modules ###所有加載到內核的模塊列表/proc/mounts ###系統中使用的所有掛載/proc/mtrr ###系統使用的Memory Type Range Registers (MTRRs)/proc/partitions ###分區中的塊分配信息/proc/pci ###系統中的PCI設備列表/proc/slabinfo ###系統中所有活動的 slab 緩存信息/proc/stat ### 所有的CPU活動信息/proc/sysrq-trigger ### /proc/uptime ###系統已經運行了多久/proc/swaps ###交換空間的使用情況/proc/version ###Linux內核版本和gcc版本/proc/bus ###系統總線(Bus)信息,例如pci/usb等/proc/driver ###驅動信息/proc/fs ###文件系統信息/proc/ide ###ide設備信息/proc/irq ###中斷請求設備信息/proc/net ###網卡設備信息/proc/scsi ###scsi設備信息/proc/tty ### tty設備信息/proc/net/dev ###顯示網絡適配器及統計信息/proc/vmstat ###虛擬內存統計信息/proc/vmcore ###內核panic時的內存映像/proc/diskstats ### 取得磁盤信息/proc/schedstat ### kernel調度器的統計信息/proc/zoneinfo ###顯示內存空間的統計信息,對分析虛擬內存行為很有用
?
例子2:顯示某個進程相關的信息
/proc/N ###pid為N的進程信息/proc/N/cmdline ###進程啟動命令/proc/N/cwd ###鏈接到進程當前工作目錄/proc/N/environ ###進程環境變量列表/proc/N/exe ###鏈接到進程的執行命令文件/proc/N/fd ###包含進程相關的所有的文件描述符/proc/N/maps ###與進程相關的內存映射信息/proc/N/mem ###指代進程持有的內存,不可讀/proc/N/root ###鏈接到進程的根目錄/proc/N/stat ###進程的狀態/proc/N/statm ###進程使用的內存的狀態/proc/N/status ###進程狀態信息,比stat/statm更具可讀性/proc/self ###鏈接到當前正在運行的進程
?例子3:顯示整個系統內存映像
$cat /proc/iomem
顯示效果如下
00000000-00000fff : reserved 00001000-0009fbff : System RAM 0009fc00-0009ffff : RAM buffer 000a0000-000bffff : PCI Bus 0000:00 000c0000-000effff : PCI Bus 0000:00000c0000-000ccfff : Video ROM000cf000-000cffff : Adapter ROM 000f0000-000fffff : PCI Bus 0000:00000f0000-000fffff : reserved000f0000-000fffff : System ROM 00100000-dfdf9bff : System RAM01000000-017bc95b : Kernel code017bc95c-01d2593f : Kernel data01e90000-01fd2fff : Kernel bss dfdf9c00-dfe4bbff : ACPI Non-volatile Storage dfe4bc00-dfe4dbff : ACPI Tables dfe4dc00-f7ffffff : reserveddff00000-f7ffffff : PCI Bus 0000:00e0000000-efffffff : PCI Bus 0000:02e0000000-efffffff : 0000:02:00.0f0000000-f01fffff : PCI Bus 0000:04f0200000-f03fffff : PCI Bus 0000:04f3d00000-f3dfffff : PCI Bus 0000:05f3de0000-f3deffff : 0000:05:00.0f3de0000-f3deffff : tg3f3df0000-f3dfffff : 0000:05:00.0f3df0000-f3dfffff : tg3f3e00000-f3efffff : PCI Bus 0000:01f3f00000-f3ffffff : PCI Bus 0000:03f4000000-f7efffff : PCI Bus 0000:02f4000000-f5ffffff : 0000:02:00.0f6000000-f6ffffff : 0000:02:00.0f7e00000-f7e1ffff : 0000:02:00.0f7ffa000-f7ffa3ff : 0000:00:1a.7f7ffa000-f7ffa3ff : ehci_hcdf7ffb000-f7ffb0ff : 0000:00:1f.3f7ffc000-f7ffffff : 0000:00:1b.0f7ffc000-f7ffffff : ICH HD audio f8000000-fcffffff : reservedf8000000-fbffffff : PCI MMCONFIG 0000 [bus 00-3f] fe000000-fed003ff : reservedfec00000-fec003ff : IOAPIC 0fec80000-fec803ff : IOAPIC 1fed00000-fed003ff : HPET 0fed00000-fed003ff : PNP0103:00 fed20000-fed9ffff : PCI Bus 0000:00 fedab410-fedab414 : iTCO_wdt fee00000-feefffff : reservedfee00000-fee00fff : Local APIC ff97c000-ff97ffff : PCI Bus 0000:00 ff980000-ff980fff : PCI Bus 0000:00ff980000-ff9803ff : 0000:00:1d.7ff980000-ff9803ff : ehci_hcd ffb00000-ffffffff : reserved 100000000-41fffffff : System RAM
?例子4:顯示進程的內存映像
$cat /proc/N/maps
顯示效果:一共分6列,
列1:address: 0085d000-00872000 虛擬內存區域的起始和終止地址文件所占的地址空間
列2:perms:rw-p 權限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
列3:offset: 00000000 虛擬內存區域在被映射文件中的偏移量
列4:dev: 03:08 文件的主設備號和次設備號
列5:inode: 設備的節點號,0表示沒有節點與內存相對應
列6:name: /lib/ld-2.3.4.so 被映射文件的文件名
列1 列2 列3 列4 列5 列6
00400000-006bc000 r-xp 00000000 fc:01 2360287 /usr/bin/python2.7 008bb000-008bc000 r--p 002bb000 fc:01 2360287 /usr/bin/python2.7 008bc000-00931000 rw-p 002bc000 fc:01 2360287 /usr/bin/python2.7 00931000-00943000 rw-p 00000000 00:00 0 01fa7000-02c15000 rw-p 00000000 00:00 0 [heap] 7f6ef306f000-7f6ef30af000 rw-p 00000000 00:00 0 7f6ef30ef000-7f6ef3df0000 rw-p 00000000 00:00 0 7f6ef3df0000-7f6ef3dfc000 r-xp 00000000 fc:01 2493117 /usr/lib/python2.7/dist-packages/OpenSSL/SSL.so 7f6ef3dfc000-7f6ef3ffb000 ---p 0000c000 fc:01 2493117 /usr/lib/python2.7/dist-packages/OpenSSL/SSL.so 7f6ef3ffb000-7f6ef3ffc000 r--p 0000b000 fc:01 2493117 /usr/lib/python2.7/dist-packages/OpenSSL/SSL.so 7f6ef3ffc000-7f6ef4000000 rw-p 0000c000 fc:01 2493117 /usr/lib/python2.7/dist-packages/OpenSSL/SSL.so
?
內存:
$ps aux -p N
常駐內存RSS,將所有的進程的RSS相加顯然是大于物理內存的。這是因為進程使用到了動態鏈接庫是共享的,因此這分空間被重復多次計算了。
可以使用cat查看proc下面的詳細內存信息
$cat /proc/N/smaps ###最詳細的內存信息 $cat /proc/N/maps$cat /proc/N/statm
?