国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

Linux中 /proc/[pid] 目錄各文件簡析

2018-06-04 17:22:44 33521

Linux 內(nèi)核提供了一種通過 proc 文件系統(tǒng),在運(yùn)行時(shí)訪問內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)、改變內(nèi)核設(shè)置的機(jī)制。proc 文件系統(tǒng)是一個(gè)偽文件系統(tǒng),它只存在內(nèi)存當(dāng)中,而不占用外存空間。它以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口。

用戶和應(yīng)用程序可以通過 proc 得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。由于系統(tǒng)的信息,如進(jìn)程,是動態(tài)改變的,所以用戶或應(yīng)用程序讀取 proc 文件時(shí),proc 文件系統(tǒng)是動態(tài)從系統(tǒng)內(nèi)核讀出所需信息并提交的。

下面列出的這些文件或子文件夾,并不是都是在你的系統(tǒng)中存在,這取決于你的內(nèi)核配置和裝載的模塊。另外,在 proc 下還有三個(gè)很重要的目錄:net,scsi 和 sys。 sys 目錄是可寫的,可以通過它來訪問或修改內(nèi)核的參數(shù),而 net 和 scsi 則依賴于內(nèi)核配置。例如,如果系統(tǒng)不支持 scsi,則 scsi 目錄不存在。

除了以上介紹的這些,還有的是一些以數(shù)字命名的目錄,它們是進(jìn)程目錄。系統(tǒng)中當(dāng)前運(yùn)行的每一個(gè)進(jìn)程都有對應(yīng)的一個(gè)目錄在 proc 下,以進(jìn)程的 PID 號為目錄名,它們是讀取進(jìn)程信息的接口。而 self 目錄則是讀取進(jìn)程本身的信息接口,是一個(gè) link。

1./proc/[pid]/auxv

/proc/[pid]/auxv 包含傳遞給進(jìn)程的 ELF 解釋器信息,格式是每一項(xiàng)都是一個(gè) unsigned long長度的 ID 加上一個(gè) unsigned long 長度的值。最后一項(xiàng)以連續(xù)的兩個(gè) 0x00 開頭。

2. /proc/[pid]/cmdline

/proc/[pid]/cmdline 是一個(gè)只讀文件,包含進(jìn)程的完整命令行信息。如果該進(jìn)程已經(jīng)被交換出內(nèi)存或者這個(gè)進(jìn)程是 zombie 進(jìn)程,則這個(gè)文件沒有任何內(nèi)容。該文件以空字符 null 而不是換行符作為結(jié)束標(biāo)志。舉例如下:

$ ps aux|grep frps
root      2406  0.1  0.1  54880 10524 ?        Sl   Dec11  21:30 frps -c ./frps.ini
 
$ cat /proc/2406/cmdline
frps-c./frps.ini

3./proc/[pid]/comm

/proc/[pid]/comm 包含進(jìn)程的命令名。舉例如下:

$ cat /proc/2406/comm
frps
4./proc/[pid]/cwd

/proc/[pid]/cwd 是進(jìn)程當(dāng)前工作目錄的符號鏈接。舉例如下:

$ ls -lt /proc/2406/cwd
lrwxrwxrwx 1 root root 0 Dec 12 20:39 /proc/2406/cwd -> /home/mike/frp_0.13.0_linux_amd64
5./proc/[pid]/environ

/proc/[pid]/environ 顯示進(jìn)程的環(huán)境變量。舉例如下:

$ strings /proc/2406/environ


SUPERVISOR_GROUP_NAME=ssh
TERM=linux
SUPERVISOR_SERVER_URL=unix:///var/run/supervisor.sock
SUPERVISOR_PROCESS_NAME=ssh
RUNLEVEL=2
UPSTART_EVENTS=runlevel
PREVLEVEL=N
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
UPSTART_INSTANCE=
UPSTART_JOB=rc
SUPERVISOR_ENABLED=1
runlevel=2
PWD=/
previous=N
6./proc/[pid]/exe
/proc/[pid]/exe 為實(shí)際運(yùn)行程序的符號鏈接。舉例如下:
 
$ ls -lt /proc/2406/exe
lrwxrwxrwx 1 root root 0 Dec 11 19:00 /proc/2406/exe -> /usr/bin/frps

7./proc/[pid]/fd

/proc/[pid]/fd 是一個(gè)目錄,包含進(jìn)程打開文件的情況。舉例如下:

$ ls -lt /proc/2406/fd
lrwx------ 1 root root 64 Dec 24 09:39 77 -> socket:[44377722]
lrwx------ 1 root root 64 Dec 17 15:07 47 -> socket:[29482617]
lr-x------ 1 root root 64 Dec 12 20:18 0 -> pipe:[13282]
l-wx------ 1 root root 64 Dec 12 20:18 1 -> pipe:[13283]
lrwx------ 1 root root 64 Dec 12 20:18 10 -> socket:[12238218]
lrwx------ 1 root root 64 Dec 12 20:18 4 -> anon_inode:[eventpoll]
lrwx------ 1 root root 64 Dec 12 20:18 40 -> socket:[19378614]
目錄中的每一項(xiàng)都是一個(gè)符號鏈接,指向打開的文件,數(shù)字則代表文件描述符。

8./proc/[pid]/latency

/proc/[pid]/latency 顯示哪些代碼造成的延時(shí)比較大。如果要使用這個(gè)特性需要執(zhí)行:

$ echo 1 > /proc/sys/kernel/latencytop

舉例如下

$ cat /proc/2406/latency
Latency Top version : v0.1
30667 10650491 4891 poll_schedule_timeout do_sys_poll SyS_poll system_call_fastpath 0x7f636573dc1d
8 105 44 futex_wait_queue_me futex_wait do_futex SyS_futex system_call_fastpath 0x7f6365a167bc

每一行前三個(gè)數(shù)字分別是后面代碼執(zhí)行的次數(shù)、總共執(zhí)行延遲時(shí)間(單位是微秒)和最長執(zhí)行延遲時(shí)間(單位是微秒)。后面則是代碼完整的調(diào)用棧。

9./proc/[pid]/root

/proc/[pid]/root 是進(jìn)程根目錄的符號鏈接。舉例如下:

$  ls -lt /proc/2406/root
lrwxrwxrwx 1 root root 0 Dec 12 20:39 /proc/2406/root -> /
10./proc/[pid]/stack

/proc/[pid]/stack 示當(dāng)前進(jìn)程的內(nèi)核調(diào)用棧信息,只有內(nèi)核編譯時(shí)打開了 CONFIG_STACKTRACE 編譯選項(xiàng),才會生成這個(gè)文件。舉例如下:

$ cat /proc/2406/stack
[<ffffffff810fa996>] futex_wait_queue_me+0xc6/0x130
[<ffffffff810fb05d>] futex_wait+0x17d/0x270
[<ffffffff810fd2d5>] do_futex+0xd5/0x520
[<ffffffff810fd791>] SyS_futex+0x71/0x150
[<ffffffff8180cc76>] entry_SYSCALL_64_fastpath+0x16/0x75
[<ffffffffffffffff>] 0xffffffffffffffff

11./proc/[pid]/statm

/proc/[pid]/statm 顯示進(jìn)程所占用內(nèi)存大小的統(tǒng)計(jì)信息。包含七個(gè)值,度量單位是 page(page大小可通過 getconf PAGESIZE 得到)。舉例如下:

$  cat /proc/2406/statm
13720 2617 493 746 0 12007 0

各個(gè)值含義:

a)進(jìn)程占用的總的內(nèi)存

b)進(jìn)程當(dāng)前時(shí)刻占用的物理內(nèi)存

c)同其它進(jìn)程共享的內(nèi)存

d)進(jìn)程的代碼段

e)共享庫(從2.6版本起,這個(gè)值為0)

f)進(jìn)程的堆棧

g)dirty pages(從2.6版本起,這個(gè)值為0)

12./proc/[pid]/status

/proc/[pid]/status 包含進(jìn)程的狀態(tài)信息。其很多內(nèi)容與 /proc/[pid]/stat 和 /proc/[pid]/statm 相同,但是卻是以一種更清晰地方式展現(xiàn)出來。

13./proc/[pid]/syscall

/proc/[pid]/syscall 顯示當(dāng)前進(jìn)程正在執(zhí)行的系統(tǒng)調(diào)用。舉例如下:

$ cat /proc/2406/syscall
202 0xab3730 0x0 0x0 0x0 0x0 0x0 0x7ffff7f6ec68 0x455bb3

第一個(gè)值是系統(tǒng)調(diào)用號(202代表poll),后面跟著 6 個(gè)系統(tǒng)調(diào)用的參數(shù)值(位于寄存器中),最后兩個(gè)值依次是堆棧指針和指令計(jì)數(shù)器的值。如果當(dāng)前進(jìn)程雖然阻塞,但阻塞函數(shù)并不是系統(tǒng)調(diào)用,則系統(tǒng)調(diào)用號的值為 -1,后面只有堆棧指針和指令計(jì)數(shù)器的值。如果進(jìn)程沒有阻塞,則這個(gè)文件只有一個(gè) running  的字符串。

內(nèi)核編譯時(shí)打開了 CONFIG_HAVE_ARCH_TRACEHOOK 編譯選項(xiàng),才會生成這個(gè)文件。

14./proc/[pid]/wchan

/proc/[pid]/wchan 顯示當(dāng)進(jìn)程 sleep 時(shí),kernel 當(dāng)前運(yùn)行的函數(shù)。舉例如下:

$ cat /proc/2406/wchan
futex_wait_queue_meadmin


提交成功!非常感謝您的反饋,我們會繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問題: