日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux /proc/pid目录下相应文件的信息说明和含义

發布時間:2025/3/15 linux 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux /proc/pid目录下相应文件的信息说明和含义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Proc是一個虛擬文件系統,在Linux系統中它被掛載于/proc目錄之上。Proc有多個功能?,這其中包括用戶可以通過它訪問內核信息或用于排錯,這其中一個非常有?用的功能,也是Linux變得更加特別的功能就是以文本流的形式來訪問進程信息。很Linux命令(比如?pstoPpstree)都需要使用這個文件系統的信息。注意,本文就是向用戶介紹一些訪問這些信息的方法?。需要說明的是,本文所述的內容并不?一定適用所有內核版本,有部分操作只適用于2.6內核。 一、進程信息 /proc文件系統中,每一個進程都有一個相應的文件?。下面是/proc目錄下的一些重要文件? /proc/pid/cmdline?包含了用于開始進程的命令? /proc/pid/cwd包含了當前進程工作目錄的一個鏈接? /proc/pid/environ?包含了可用進程環境變量的列表? /proc/pid/exe?包含了正在進程中運行的程序鏈接; /proc/pid/fd/?這個目錄包含了進程打開的每一個文件的鏈接; /proc/pid/mem?包含了進程在內存中的內容; /proc/pid/stat包含了進程的狀態信息; /proc/pid/statm?包含了進程的內存使用信息。 下面是一些獲取進程信息的例子: ?假設現在要查看是否所有的進程都會做存儲器清除工作。在/proc/pid/stat文件中的每一?個進程標識?(8個屬性)提供了有關進程的很多?“個人”信?息。這個信?息可以對每一個?進程標識進行。 0x00000002 Process being created 0x00000004 Exiting 0x00000008 Dead 0x00000040 Process using superuser privflage 0x00000200??P rocess dumping core 0x00000400 Prooess received some signal 0x00000800??Process allocating memory 0x00001000 Killed due to out-of--memory condition 筆者從/usr/src/linux/include/linux/sched.h?中提取了這些信息。 ?/proc/pid/fd/?目錄提供?了有關打開文件的信息。要查看被進程使用的輸入文件,使用以下命令 # ls –l /proc/pid/fd/0 ??查看被進程使用socket,使用以下命令? #ls –l /proc/pid/fd|sed –n `/socket/{s/.* //;s/ //p}` 有關這些socket的信息可以使用以下命令獲取? # netstat --ae ?要將命令行參數傳遞給任意進程,使用以下命令? ~~cat /proc/pid/cmdline ??獲取某一進程父進程的ID號,使用以下命令: #grep PPid/proc/pid/status 二、普通的系統信息 Proc包含了很多系統信息,這其中包括CPU負載、文件系統和網絡配置?。下面是一些通過Proc查看和更改系統的例子: ?獲取可用系統內存的空間? # grep??Free /proc/meminfo ?自從系統最后一次啟動后的系統統計可以從/proc/stat文件中獲取? #grep processes /proc/stat ?獲知第?1515分鐘系統負載的平均值? #awk `{print “1 min:\t” $1 “\n5 min:\t” $2 “\n15 min:\t” $3}` /proc/loadavg ?/proc/partitions可用于獲取系統的分區信息? ?/proc/net/proc/sys/net可用于查看和更改重要的網絡信息。比如,禁用ping命令,可以以root身份運行以下命令? #echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_all 如果要啟用IP轉發/IP偽裝,使用以下命令? #echo 1> /proc/sys/net/ipv4/ip_forward ?已經掛載的文件系統信息可以從/proc/mounts中檢索。 ?要改變正在使用的主機名?,使用以下命令: # echo www.abc.corn >/proc/sys/kernel/hostname ?要獲取CPU信息,使用以下命令? # cat /proc/cpuinfo ?要獲知swap空間的使用情況?,使用以下命令: # cat /proc/swaps ?獲取系統的正常運行時間: #cat /proc/uptime ?列出由NFS共享的文件系統: # cat /proc/fs/nfsd/exports 三、相關內核的信息 這是一個非常寬泛的主題,這里只介紹其中一小部分內容: ?從正在運行的內核中獲知內核的版本: #cat /proc/version ?/proc/kmsg文件被作為內核日志信息源,它可以被作為一個系統信息調用的接口使用。 ?/proc/kcore文件提供了以內核文件格式形式訪問系統物理內存,并且可以被gdb用于檢查任意內核數據結構的當前狀態。如果裝了源碼,那么可以通過查看/usr/src/linux/Documentation/filesystems/proc.txt文件來獲取更多的信息? 從中可以看出來,Proc是一個非常不錯的獲取系統信息渠道。如果利用得好,則它對Linux系統的維護和管理能提供非常大的幫助。
【各個文件含義】 /proc 是一個偽文件系統, 被用作內核數據結構的接口, 而不僅僅是解釋說明/dev/kmem. /proc 里的大多數文件都是只讀的, 但也可以通過寫一些文件來改變內核變量. (

Linux 內核提供了一種通過 /proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制proc文件系統是一個偽文件系統,它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。

用戶和應用程序可以通過proc得到系統的信息,并可以改變內核的某些參數。由于系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取proc文件時,proc文件系統是動態從系統內核讀出所需信息并提交的。下面列出的這些文件或子文件夾,并不是都是在你的系統中存在,這取決于你的內核配置和裝載的模塊。另外,在/proc下還有三個很重要的目錄:net,scsi和sys。 Sys目錄是可寫的,可以通過它來訪問或修改內核的參數,而net和scsi則依賴于內核配置。例如,如果系統不支持scsi,則scsi 目錄不存在。

除了以上介紹的這些,還有的是一些以數字命名的目錄,它們是進程目錄。系統中當前運行的每一個進程都有對應的一個目錄在/proc下,以進程的 PID號為目錄名,它們是讀取進程信息的接口。而self目錄則是讀取進程本身的信息接口,是一個link。

)


下面對整個 /proc 目錄作一個大略的介紹.

[number]
在 /proc 目錄里, 每個正在運行的進程都有一個以該進程 ID 命名的子目錄, 其下包括如下的目錄和偽文件: [number] /cmdline
該文件保存了進程的完整命令行. 如果該進程已經被交換出內存, 或者該進程已經僵死, 那么就沒有任何東西在該文件里, 這時候對該文件的讀操作將返回零個字符. 該文件以空字符 null 而不是換行符作為結束標志.
[number] /cwd
一個符號連接, 指向進程當前的工作目錄. 例如, 要找出進程 20 的 cwd, 你可以:
cd /proc/20/cwd; /bin/pwd
請注意 pwd 命令通常是 shell 內置的, 在這樣的情況下可能工作得不是很好(casper 注: pwd 只能顯示 /proc/20/cwd, 要是想知道它的工作目錄,直接ls -al /proc/20不就好了).
[number] /environ
該文件保存進程的環境變量, 各項之間以空字符分隔, 結尾也可能是一個空字符. 因此, 如果要輸出進程 1 的環境變量, 你應該:
(cat /proc/1/environ; echo) | tr ";\000"; ";\n";
(至于為什么想要這么做, 請參閱 lilo(8).)
[number] /exe
也是一個符號連接, 指向被執行的二進制代碼. 在?Linux?2.0 或者更早的版本下, 對 exe 特殊文件的 readlink(2) 返回一個如下格式的字符串: [設備號]:節點號 舉個例子, [0301]:1502 就是某設備的 1502 節點, 該設備的主設備號為 03 (如 IDE, MFM 等驅動器), 從設備號為 01 (第一個驅動器的第一分區). 而在?Linux?2.2 下, readlink(2) 則給出命令的實際路徑名. 另外, 該符號連接也可以正常析引用(試圖打開 exe 文件實際上將打開一個可執行文件). 你甚至可以鍵入 /proc/[number]/exe 來運行 [number] 進程的副本. 帶 -inum 選項的?find(1) 命令可以定位該文件.
[number] /fd
進 程所打開的每個文件都有一個符號連接在該子目錄里, 以文件描述符命名, 這個名字實際上是指向真正的文件的符號連接,(和 exe 記錄一樣).例如, 0 是標準輸入, 1 是標準輸出, 2 是標準錯誤, 等等. 程序有時可能想要讀取一個文件卻不想要標準輸入,或者想寫到一個文件卻不想將輸出送到標準輸出去,那么就可以很有效地用如下的辦法騙過(假定 -i 是輸入文件的標志, 而 -o 是輸出文件的標志):
foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
這 樣就是一個能運轉的過濾器. 請注意該方法不能用來在文件里搜索, 這是因為 fd 目錄里的文件是不可搜索的. 在 UNIX 類的系統下, /proc/self/fd/N 基本上就與 /dev/fd/N 相同. 實際上, 大多數的 Linux MAKEDEV 腳本都將 /dev/fd 符號連接到 [..]/proc/self/fd 上. ]

?

attr:

進程的屬性

?

cmdline:

啟動進程時執行的命令

?

cwd:

指向進程當前工作目錄的軟

?ll cwd可知是個軟連接。

?

environ:

進程執行時使用的環境變量,文件內容使用null字節('\0')分隔,然后以null字節結束。因此獲取進程使用的環境變量使用如下:

(cat /proc/pid/environ; echo) | tr '\000' '\n'

?

fd:

?此目錄包含進程打開的所有文件,文件名為文件描述符,目錄中每個軟連接都會指向進程打開的實際文件。

?比如:nginx下:

root@iZ23onhpqvwZ:/proc/22210/fd# ll
total 0
dr-x------ 2 root root 0 Oct 20 17:39 ./
dr-xr-xr-x 9 root root 0 Oct 20 17:22 ../
lrwx------ 1 root root 64 Oct 20 17:39 0 -> /dev/null
lrwx------ 1 root root 64 Oct 20 17:39 1 -> /dev/null
lrwx------ 1 root root 64 Oct 20 17:39 10 -> socket:[2917559817]
l-wx------ 1 root root 64 Oct 20 17:39 2 -> /opt/nginx/logs/error.log
l-wx------ 1 root root 64 Oct 20 17:39 3 -> /opt/nginx/logs/access.log
lrwx------ 1 root root 64 Oct 20 17:39 6 -> socket:[2917557592]
lrwx------ 1 root root 64 Oct 20 17:39 7 -> socket:[2917557593]
l-wx------ 1 root root 64 Oct 20 17:39 8 -> /opt/nginx/logs/error.log
lrwx------ 1 root root 64 Oct 20 17:39 9 -> socket:[2917559816]

?

limits:

該文件存儲了進程的軟限制,硬限制等信息。

?可以查看該進程允許打開的最大描述字個數。

?

?

maps:

?

?

?? ? ?address ?? ? ? ?perms offset ?dev ? inode ? pathname

?? ? ?08048000-08056000 r-xp 00000000 03:0c 64593 ? /usr/sbin/gpm

?? ? ?4001f000-40135000 r-xp 00000000 03:0c 45494 ? /lib/libc-2.2.4.so

? ? ? ? ?* address:進程占用的地址空間。

? ? ? ? ?* perms:權限集

? ? ? ? ? ? ? ? ?r = read

? ? ? ? ? ? ? ? ?w = write

? ? ? ? ? ? ? ? ?x = execute

? ? ? ? ? ? ? ? ?s = shared

? ? ? ? ? ? ? ? ?p = private (copy on write)

? ? ? ? * offset:文件偏移量。

? ? ? ? * dev:為設備(major:minor)

? ? ? ? * inode:設備上的inode。0為沒有inode關聯互內存區域,通常為:BSS(uninitialized data)

?

root:

指向進程更目錄的軟鏈

?

smaps:

?

?? ? ?This file shows memory consumption for each of the process's mappings. ?For each of mappings there is a series of lines such as the following:

?

??08048000-080bc000 r-xp 00000000 03:02 13130 ?? /bin/bash

??Size: ?? ? ?464 kB

??Rss: ?? ? ?424 kB

??Shared_Clean: ?? ? ?424 kB

??Shared_Dirty: 0 kB

??Private_Clean: 0 kB

??Private_Dirty: 0 kB

?

?? ? ?The first of these lines shows the same information as is displayed for the mapping in /proc/[pid]/maps. The remaining lines show the size of

?? ? ?the ?mapping, ?the amount of the mapping that is currently resident in RAM, the number of clean and dirty shared pages in the mapping, and the

?? ? ?number of clean and dirty private pages in the mapping.

?

?? ? ?This file is only present if the CONFIG_MMU kernel configuration option is enabled.

status: Name: ??bash State: ?S (sleeping) Tgid: ??3515 Pid: ??3515 PPid: ??3452 TracerPid: ??0 Uid: ??1000 ??1000 ??1000 ??1000 Gid: ??100 ??100 ??100 ??100 FDSize: 256 Groups: 16 33 100 VmPeak: ? ? 9136 kB VmSize: ? ? 7896 kB VmLck: ?0 kB VmHWM: ? ? ?7572 kB VmRSS: ? ? ?6316 kB VmData: ? ? 5224 kB VmStk: 88 kB VmExe: ? ? ? 572 kB VmLib: ? ? ?1708 kB VmPTE: 20 kB Threads: ??1 SigQ: ??0/3067 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000010000 SigIgn: 0000000000384004 SigCgt: 000000004b813efb CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: ffffffffffffffff Cpus_allowed: ??00000001 Cpus_allowed_list: ??0 Mems_allowed: ??1 Mems_allowed_list: ??0 voluntary_ctxt_switches: ??150 nonvoluntary_ctxt_switches: ??545 The fields are as follows: * Name: Command run by this process. * State: Current state of the process. ?One of "R (running)", "S (sleeping)", "D (disk sleep)", "T (stopped)", "T (tracing ?stop)", ?"Z ?(zom- bie)", or "X (dead)". * Tgid: Thread group ID (i.e., Process ID). * Pid: Thread ID (see gettid(2)). * TracerPid: PID of process tracing this process (0 if not being traced). * Uid, Gid: Real, effective, saved set, and file system UIDs (GIDs). * FDSize: Number of file descriptor slots currently allocated. * Groups: Supplementary group list. * VmPeak: Peak virtual memory size. * VmSize: Virtual memory size. * VmLck: Locked memory size. * VmHWM: Peak resident set size ("high water mark"). * VmRSS: Resident set size. * VmData, VmStk, VmExe: Size of data, stack, and text segments. * VmLib: Shared library code size. * VmPTE: Page table entries size (since Linux 2.6.10). * Threads: Number of threads in process containing this thread. * SigPnd, ShdPnd: Number of signals pending for thread and for process as a whole (see pthreads(7) and signal(7)). * SigBlk, SigIgn, SigCgt: Masks indicating signals being blocked, ignored, and caught (see signal(7)). * CapInh, CapPrm, CapEff: Masks of capabilities enabled in inheritable, permitted, and effective sets (see capabilities(7)). * CapBnd: Capability Bounding set (since kernel 2.6.26, see capabilities(7)). * Cpus_allowed: Mask of CPUs on which this process may run (since Linux 2.6.24, see cpuset(7)). * Cpus_allowed_list: Same as previous, but in "list format" (since Linux 2.6.26, see cpuset(7)). * Mems_allowed: Mask of memory nodes allowed to this process (since Linux 2.6.24, see cpuset(7)). * Mems_allowed_list: Same as previous, but in "list format" (since Linux 2.6.26, see cpuset(7)). * voluntary_context_switches, nonvoluntary_context_switches: Number of voluntary and involuntary context switches (since Linux 2.6.23). task: 進程包含的線程,子目錄名是線程的ID
【備注】/proc/pid下的相應信息說明

一、/proc/pid/statm

pid/statm包含了在此進程中所有CPU活躍的信息,該文件中的所有值都是從系統啟動開始累計到當前時刻。

?

/proc/1 # cat statm

550 70 62 451 0 97 0

?

輸出解釋

CPU?以及CPU0。。。的每行的每個參數意思(以第一行為例)為:

參數?解釋?/proc/1/status

Size (pages)= 550 ?任務虛擬地址空間的大小?VmSize/4

Resident(pages)= 70 ?應用程序正在使用的物理內存的大小?VmRSS/4

Shared(pages)= 62 ?共享頁數

Trs(pages)= 451 ?程序所擁有的可執行虛擬內存的大小?VmExe/4

Lrs(pages)= 0 ?被映像到任務的虛擬內存空間的庫的大小?VmLib/4

Drs(pages)= 97 ?程序數據段和用戶態的棧的大小?VmData+ VmStk?4

dt(pages) 0

?

二、/proc/pid/stat

pid/stat包含了進程所有CPU活躍的信息,該文件中的所有值都是從系統啟動開始累計到當前時刻。

/proc/1 # cat stat

1 (linuxrc) S 0 0 0 0 -1 8388864 50 633 20 4 2 357 72 342 16 0 1 0 22 2252800 70 4294967295 32768 1879936 3199270704 3199269552 1113432 0 0 0 674311 3221479524 0 0 0 0 0 0

?

每個參數意思為:

參數?解釋

pid=1?進程(包括輕量級進程,即線程)

comm= linuxrc?應用程序或命令的名字

task_state=S?任務的狀態,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead

ppid=0?父進程ID

pgid=0?線程組號

sid=0 c該任務所在的會話組ID

tty_nr=0(pts/3)?該任務的tty終端的設備號,INT0/256=主設備號,(0-主設備號)=次設備號

tty_pgrp=-1?終端的進程組號,當前運行在該任務所在終端的前臺任務(包括shell?應用程序)PID

task->flags=8388864進程標志位,查看該任務的特性

min_flt=50該任務不需要從硬盤拷數據而發生的缺頁(次缺頁)的次數

cmin_flt=633?累計的該任務的所有的waited-for進程曾經發生的次缺頁的次數目

maj_flt=20該任務需要從硬盤拷數據而發生的缺頁(主缺頁)的次數

cmaj_flt=4?累計的該任務的所有的waited-for進程曾經發生的主缺頁的次數目

utime=2?該任務在用戶態運行的時間,單位為jiffies

stime=357?該任務在核心態運行的時間,單位為jiffies

cutime=72?累計的該任務的所有的waited-for進程曾經在用戶態運行的時間,單位為jiffies

cstime=342?累計的該任務的所有的waited-for進程曾經在核心態運行的時間,單位為jiffies

priority=16?任務的動態優先級

nice=0?任務的靜態優先級

num_threads=1?該任務所在的線程組里線程的個數

it_real_value=0?由于計時間隔導致的下一個?SIGALRM?發送進程的時延,以?jiffy?為單位.

start_time=22?該任務啟動的時間,單位為jiffies

vsize=2252800bytes?該任務的虛擬地址空間大小

rss=70(page)?該任務當前駐留物理地址空間的大小

Number of pages the process has in real memory,minu 3 for administrative purpose.

這些頁可能用于代碼,數據和棧。

rlim=4294967295=0xFFFFFFFFbytes?該任務能駐留物理地址空間的最大值

start_code=32768=0x8000??該任務在虛擬地址空間的代碼段的起始地址(由連接器決定)

end_code=1879936該任務在虛擬地址空間的代碼段的結束地址

start_stack=3199270704=0Xbeb0ff30該任務在虛擬地址空間的棧的開始地址

kstkesp=3199269552 ?sp(32?位堆棧指針)?的當前值,?與在進程的內核堆棧頁得到的一致.

kstkeip=1113432 =0X10FD58?指向將要執行的指令的指針, PC(32?位指令指針)的當前值.

pendingsig=0?待處理信號的位圖,記錄發送給進程的普通信號

block_sig=0?阻塞信號的位圖

sigign=0?忽略的信號的位圖

sigcatch=674311被俘獲的信號的位圖

wchan=3221479524 ?如果該進程是睡眠狀態,該值給出調度的調用點

nswap=0?swapped的頁數

cnswap=0?所有子進程被swapped的頁數的和

exit_signal=0 ?該進程結束時,向父進程所發送的信號

task_cpu(task)=0?運行在哪個CPU

task_rt_priority=0?實時進程的相對優先級別

task_policy=0?進程的調度策略,0=非實時進程,1=FIFO實時進程;2=RR實時進程?

?

三、/proc/pid/status

包含了所有CPU活躍的信息,該文件中的所有值都是從系統啟動開始累計到當前時刻。

?

/proc/286 # cat status

Name:?? mmtest

State:? R (running)

SleepAVG:?????? 0%

Tgid:?? 286

Pid:??? 286

PPid:?? 243

TracerPid:????? 0

Uid:??? 0?????? 0?????? 0?????? 0

Gid:??? 0?????? 0?????? 0?????? 0

FDSize: 32

Groups:

VmPeak:???? 1464 kB

VmSize:???? 1464 kB

VmLck:???????? 0 kB

VmHWM:?????? 344 kB

VmRSS:?????? 344 kB

VmData:?????? 20 kB

VmStk:??????? 84 kB

VmExe:???????? 4 kB

VmLib:????? 1300 kB

VmPTE:???????? 6 kB

Threads:??????? 1

SigQ:?? 0/256

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000000000

SigIgn: 0000000000000000

SigCgt: 0000000000000000

CapInh: 0000000000000000

CapPrm: 00000000fffffeff

CapEff: 00000000fffffeff

?

輸出解釋

參數?解釋

Name?應用程序或命令的名字

State?任務的狀態,運行/睡眠/僵死/

SleepAVG?任務的平均等待時間(nanosecond為單位),交互式任務因為休眠次數多、時間長,它們的?sleep_avg?也會相應地更大一些,所以計算出來的優先級也會相應高一些。

Tgid=286?線程組號

Pid=286?任務ID

Ppid=243?父進程ID

TracerPid=0?接收跟蹤該進程信息的進程的ID

Uid Uid euid suid fsuid

Gid Gid egid sgid fsgid

FDSize=32?文件描述符的最大個數,最多能打開的文件句柄的個數file->fds

Groups

VmPeak: 60184 kB /*進程地址空間的大小*/
VmHWM: 18020 kB /*文件內存映射和匿名內存映射的大小*/

VmSize(KB)=1499136?任務虛擬地址空間的大小?(total_vm-reserved_vm),其中total_vm為進程的地址空間的大小,reserved_vm:進程在預留或特殊的內存間的物理頁

VmLck(KB)=0?任務已經鎖住的物理內存的大小。鎖住的物理內存不能交換到硬盤?(locked_vm)

VmRSS(KB)= 344 kB?應用程序正在使用的物理內存的大小,就是用ps命令的參數rss的值?(rss)

VmData(KB)=20KB?程序數據段的大小(所占虛擬內存的大小),存放初始化了的數據;?(total_vm-shared_vm-stack_vm)

VmStk(KB)=84KB?任務在用戶態的棧的大小?(stack_vm)

VmExe(KB)=4KB?程序所擁有的可執行虛擬內存的大小,代碼段,不包括任務使用的庫?(end_code-start_code)

VmLib(KB)=1300KB?被映像到任務的虛擬內存空間的庫的大小?(exec_lib)

VmPTE=6KB?該進程的所有頁表的大小,單位:kb

Threads=1?共享使用該信號描述符的任務的個數,在POSIX多線程序應用程序中,線程組中的所有線程使用同一個信號描述符。

SigQ?待處理信號的個數

SigPnd?屏蔽位,存儲了該線程的待處理信號

ShdPnd?屏蔽位,存儲了該線程組的待處理信號

SigBlk?存放被阻塞的信號

SigIgn?存放被忽略的信號

SigCgt?存放被俘獲到的信號

CapInh Inheritable,能被當前進程執行的程序的繼承的能力

CapPrm Permitted,進程能夠使用的能力,可以包含CapEff中沒有的能力,這些能力是被進程自己臨時放棄的,CapEffCapPrm的一個子集,進程放棄沒有必要的能力有利于提高安全性

CapEff Effective,進程的有效能力

?

四、/proc/loadavg

該文件中的所有值都是從系統啟動開始累計到當前時刻。該文件只給出了所有CPU的集合信息,不能該出每個CPU的信息。

?

/proc # cat loadavg

1.0???1.00 0.93 2/19 301

?

?

每個值的含義為:

參數?解釋

lavg_1 (1.0) 1-分鐘平均負載

lavg_5 (1.00) 5-分鐘平均負載

lavg_15(0.93) 15-分鐘平均負載

nr_running (2)?在采樣時刻,運行隊列的任務的數目,與/proc/statprocs_running表示相同意思

nr_threads (19)?在采樣時刻,系統中活躍的任務的個數(不包括運行已經結束的任務)

last_pid(301)?最大的pid值,包括輕量級進程,即線程。

假設當前有兩個CPU,則每個CPU的當前任務數為4.61/2=2.31

?

五、/proc/286/smaps

該文件反映了該進程的相應線性區域的大小

/proc/286 # cat smaps

00008000-00009000 r-xp 00000000 00:0c 1695459??? /memtest/mmtest

Size:???????????????? 4 kB

Rss:????????????????? 4 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:??????? 4 kB

Private_Dirty:??????? 0 kB

00010000-00011000 rw-p 00000000 00:0c 1695459??? /memtest/mmtest

Size:???????????????? 4 kB

Rss:????????????????? 4 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:??????? 0 kB

Private_Dirty: ???????4 kB

00011000-00012000 rwxp 00011000 00:00 0????????? [heap]

Size:???????????????? 4 kB

Rss:????????????????? 0 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:??????? 0 kB

Private_Dirty:??????? 0 kB

40000000-40019000 r-xp 00000000 00:0c 2413396??? /lib/ld-2.3.2.so

Size:?????????????? 100 kB

Rss:???????????????? 96 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:?????? 96 kB

Private_Dirty:??????? 0 kB

40019000-4001b000 rw-p 40019000 00:00 0

Size:??????? ?????????8 kB

Rss:????????????????? 8 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:??????? 0 kB

Private_Dirty:??????? 8 kB

40021000-40022000 rw-p 00019000 00:0c 2413396??? /lib/ld-2.3.2.so

Size:???????????????? 4 kB

Rss:????????? ????????4 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:??????? 0 kB

Private_Dirty:??????? 4 kB

40022000-4014e000 r-xp 00000000 00:0c 2413367??? /lib/libc-2.3.2.so

Size:????????????? 1200 kB

Rss:??????????????? 200 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:????? 200 kB

Private_Dirty:??????? 0 kB

4014e000-40152000 ---p 0012c000 00:0c 2413367??? /lib/libc-2.3.2.so

Size:??????????????? 16 kB

Rss:????????????????? 0 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:??????? 0 kB

Private_Dirty:??????? 0 kB

40152000-4015a000 rw-p 00128000 00:0c 2413367??? /lib/libc-2.3.2.so

Size:??????????????? 32 kB

Rss:???????????????? 16 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:??????? 0 kB

Private_Dirty:?????? 16 kB

4015a000-4015c000 rw-p 4015a000 00:00 0

Size:???????????????? 8 kB

Rss:????????????????? 8 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:??????? 0 kB

Private_Dirty:??????? 8 kB

be8f1000-be906000 rwxp be8f1000 00:00 0????????? [stack]

Size:??????????????? 84 kB

Rss:????????????????? 4 kB

Shared_Clean:???????? 0 kB

Shared_Dirty:???????? 0 kB

Private_Clean:??????? 0 kB

Private_Dirty:??????? 4 kB

?

解釋說明:

每行數據格式如下:

(內存區域)開始-結束 訪問權限? 偏移 主設備號:次設備號 i節點? 文件。

be8f1000-be906000 rwxp be8f1000 00:00 0????????? [stack]

Size:相應虛擬地址空間的大小

RSS:?正在使用的物理內存的大小

Shared_Clean:??共享區域的未使用頁數

Shared_Dirty:???共享區域已經使用的頁數

Private_Clean:???私有區域未使用的頁數

Private_Dirty:??私有區域已經使用的頁數

?

六、/proc/pid/maps

該文件反映了進程占用的內存區域

/proc/286 # cat maps

00008000-00009000 r-xp 00000000 00:0c 1695459??? /memtest/mmtest

00010000-00011000 rw-p 00000000 00:0c 1695459??? /memtest/mmtest

00011000-00012000 rwxp 00011000 00:00 0????????? [heap]

40000000-40019000 r-xp 00000000 00:0c 2413396??? /lib/ld-2.3.2.so

40019000-4001b000 rw-p 40019000 00:00 0

40021000-40022000 rw-p 00019000 00:0c 2413396??? /lib/ld-2.3.2.so

40022000-4014e000 r-xp 00000000 00:0c 2413367??? /lib/libc-2.3.2.so

4014e000-40152000 ---p 0012c000 00:0c 2413367??? /lib/libc-2.3.2.so

40152000-4015a000 rw-p 00128000 00:0c 2413367??? /lib/libc-2.3.2.so

4015a000-4015c000 rw-p 4015a000 00:00 0

be8f1000-be906000 rwxp be8f1000 00:00 0????????? [stack]

每行數據格式如下:

(內存區域)開始-結束 訪問權限? 偏移 主設備號:次設備號 i節點? 文件。 【案例分析】

/proc文件系統,不是普通的文件系統,而是系統內核的映像,該目錄中的文件時存放在系統內存中的,它以文件系統的形式為訪問系統內核數據的操作提供接口。

查看內核版本命令:uname -

? ? ? ? ? ? ? ?或者:cat /proc/version

? ? ? ? ? ? ? ?或者:lsb_release -a,可以列出所有版本信息。

/proc文件下有根據進程號排列的信息:

查看進程詳細信息到/proc/pid/status下尋找

/proc/pid/cmdline 進程啟動命令
  /proc/pid/cwd 鏈接到進程當前工作目錄
  /proc/pid/environ 進程環境變量列表
  /proc/pid/exe 鏈接到進程的執行命令文件
  /proc/pid/fd 包含進程相關的所有的文件描述符
  /proc/pid/maps 與進程相關的內存映射信息
  /proc/pid/mem 指代進程持有的內存,不可讀
  /proc/pid/root 鏈接到進程的根目錄
  /proc/pid/stat 進程的狀態
  /proc/pid/statm 進程使用的內存的狀態
  /proc/pid/status 進程狀態信息,比stat/statm更具可讀性
  /proc/self 鏈接到當前正在運行的進程

我們來具體研究一下/proc/pid/status文件:

red-hat 6.2下的線程也就是輕量級進程LWP,在/proc/pid下是沒有的,它們是使用父進程的系統資源,使用父進程的文件描述符,內存,CPU等資源。

可以看出,linux下進程所有的線程:threads:26,這些事父進程所擁有的線程。

文件描述符;FD size,可以看到

此為,進程打開的文件信息。

總結

以上是生活随笔為你收集整理的Linux /proc/pid目录下相应文件的信息说明和含义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。