簡單案例教你用PROC文件系統獲取進程信息
原創【51CTO獨家特稿】本文將通過一個簡單易懂的例子說明如何使用Linux下的PROC文件系統來獲得進程的信息。通過PROC文件系統獲取的信息主要是進程使用的虛擬內存、以及實際內存、信號機制方面的信息,和Linux下的其他監控工具搭配,能夠對系統運行的情況有一個全面的掌握。首先提供一段PROC文件系統的簡單介紹:
PROC文件系統是一個虛擬的文件系統,通過文件系統的接口實現,用于輸出系統的運行狀態。它以文件系統的形式,為操作系統本身和應用進程之間的通信提供了一個界面,使應用程序能夠安全、方便地獲得系統當前的運行狀況和內核的內部數據信息,并可以修改某些系統的配置信息。另外,由于PROC以文件系統的接口實現,因此用戶可以像訪問普通文件一樣對其進行訪問,但它只存在于內存之中,并不存在于真正的物理磁盤當中。所以,當系統重啟和電源關閉的時候,該系統中的數據和信息將全部消失。
表1說明了該文件系統中一些重要的文件和目錄。
表1 重要的PROC文件系統文件和目錄
文件或目錄 | 說 明 |
/proc/1 | 關于進程1的信息目錄。每個進程在/proc下有一個名為其進程號的目錄 |
/proc/cpuinfo | 處理器信息,如類型、制造商、型號和性能 |
/proc/devices | 當前運行的核心配置的設備驅動的列表 |
/proc/dma | 顯示當前使用的DMA通道 |
/proc/filesystems | 核心配置的文件系統 |
/proc/interrupts | 顯示使用的中斷 |
/proc/ioports | 當前使用的I/O端口 |
/proc/kcore | 系統物理內存映像 |
/proc/kmsg | 核心輸出的消息,也被送到syslog |
/proc/ksyms | 核心符號表 |
/proc/loadavg | 系統的平均負載 |
/proc/meminfo | 存儲器使用信息,包括物理內存和swap |
/proc/modules | 當前加載了哪些核心模塊 |
/proc/net | 網絡協議狀態信息 |
/proc/stat | 系統的不同狀態 |
/proc/version | 核心版本 |
/proc/uptime | 系統啟動的時間長度 |
值得注意的是:所有上述文件給出易讀的文本文件,有時可能是不易讀的格式。有許多命令做了些格式化以更容易讀。例如,free程序讀/proc/meminfo并將給出的字節數轉換為千字節(并增加了一些信息)。
下面將通過例子來說明如何使用PROC文件系統來獲得進程的信息。
首先使用vi編輯器建立一個c源程序文件,編譯后形成目標文件,該文件的主要功能是進行計算,將其保存在/root目錄下,下面將其運行:
#cd /root //切換目錄 #./calculate //運行該程序,則生成了以該程序為名稱的進程
使用ps命令,則能發現在系統中運行了calculate這樣一個進程:
#ps root 2108 61.2 0.1 1344 224 pts/0 R 21:20 0:11 ./calculate ……
進程的基本信息都會存放在/proc文件系統中,具體位置是在/proc目錄下。通過使用如下命令可以查看系統中運行進程的相關信息:
# ls /proc //查看/proc目錄下的內容
//如下顯示為系統中運行進程的信息所存放的目錄,每個進程對應一個目錄,加藍的2108為本例使用的進程的詳細信息所在目錄
1 1790 1922 2049 2083 8 fs meminfo swaps
10 1799 1923 2056 2108 9 ide misc sys
11 1809 1924 2063 2111 apm interrupts modules sysvipc
1491 1818 1925 2065 2138 bus iomem mounts tty
1550 1829 1968 2067 2162 cmdline ioports mtrr uptime
1554 1893 1969 2069 2163 cpuinfo irq net version
1572 19 1978 2071 3 devices kcore partitions
1591 1902 2 2073 4 dma kmsg pci
1670 1911 2032 2074 5 driver ksyms scsi
1720 1919 2043 2079 6 execdomains loadavg self
1757 1920 2045 2081 7 fb locks slabinfo
1771 1921 2047 2082 77 filesystems mdstat stat
#cd 2108 //切換到2108目錄,以方便詳細的查看進程信息
#ls //列出進程詳細的狀態信息文件
cmdline cwd environ exe fd maps mem mounts root stat statm status
在這些文件當中,status這個狀態文件是比較重要的,包含了很多關于進程的有用的信息,用戶可以從這個文件獲得信息,如下為列出該文件內容的操作:
#cat status //使用cat命令列出status文件內容 Name: calculate //進程名 State: R (running) //進程運行狀態 Tgid: 2108 //進程組ID Pid: 2108 //進程ID PPid: 2083 //父進程ID TracerPid: 0 //跟蹤調試進程ID Uid: 0 0 0 0 //進程所對應程序的UID Gid: 0 0 0 0 //進程所對應程序的GID FDSize: 256 //進程使用文件句柄大小 Groups: 0 1 2 3 4 10 10 //組信息 //進程所使用的虛擬內存以及實際內存、信號機制方面的信息 VmSize: 1344 kB VmLck: 0 kB VmRSS: 224 kB VmData: 12 kB VmStk: 16 kB VmExe: 4 kB VmLib: 1292 kB SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 8000000000000000 SigCgt: 0000000000000000 CapInh: 0000000000000000 CapPrm: 00000000fffffeff CapEff: 00000000fffffeff
這樣,我們就可以知道進程使用的虛擬內存、以及實際內存、信號機制方面的信息了。
【編輯推薦】