手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

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

2018-06-04 17:22:44 33085

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

用戶和應用程序可以通過 proc 得到系統的信息,并可以改變內核的某些參數。由于系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取 proc 文件時,proc 文件系統是動態從系統內核讀出所需信息并提交的。

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

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

1./proc/[pid]/auxv

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

2. /proc/[pid]/cmdline

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

$ 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 包含進程的命令名。舉例如下:

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

/proc/[pid]/cwd 是進程當前工作目錄的符號鏈接。舉例如下:

$ 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 顯示進程的環境變量。舉例如下:

$ 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 為實際運行程序的符號鏈接。舉例如下:
 
$ 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 是一個目錄,包含進程打開文件的情況。舉例如下:

$ 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]
目錄中的每一項都是一個符號鏈接,指向打開的文件,數字則代表文件描述符。

8./proc/[pid]/latency

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

$ 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

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

9./proc/[pid]/root

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

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

/proc/[pid]/stack 示當前進程的內核調用棧信息,只有內核編譯時打開了 CONFIG_STACKTRACE 編譯選項,才會生成這個文件。舉例如下:

$ 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 顯示進程所占用內存大小的統計信息。包含七個值,度量單位是 page(page大小可通過 getconf PAGESIZE 得到)。舉例如下:

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

各個值含義:

a)進程占用的總的內存

b)進程當前時刻占用的物理內存

c)同其它進程共享的內存

d)進程的代碼段

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

f)進程的堆棧

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

12./proc/[pid]/status

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

13./proc/[pid]/syscall

/proc/[pid]/syscall 顯示當前進程正在執行的系統調用。舉例如下:

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

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

內核編譯時打開了 CONFIG_HAVE_ARCH_TRACEHOOK 編譯選項,才會生成這個文件。

14./proc/[pid]/wchan

/proc/[pid]/wchan 顯示當進程 sleep 時,kernel 當前運行的函數。舉例如下:

$ cat /proc/2406/wchan
futex_wait_queue_meadmin


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

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

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

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