日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

理解/proc文件系統(tǒng)

不只一次的有人問我關(guān)于/proc文件系統(tǒng),那是什么,那些巨大的文件在那里做什么?我可以刪除它們嗎?本文將詳細(xì)介紹/proc文件系統(tǒng),描述一些工具,你可以通過這些工具領(lǐng)略/proc的威力 。最后有一個例子程序,演示了系統(tǒng)管理員如何與/proc交互 。

◆ 介紹/proc

在過去那些糟糕的日子里,只能通過直接訪問內(nèi)核內(nèi)存(/dev/kmem)獲取進(jìn)程數(shù)據(jù),比如運(yùn)行ps(1)命令時 。為了實現(xiàn)這種訪問,需要超級用戶權(quán)限,而且步驟相當(dāng)復(fù)雜 。Sun公司從Unix SVR4開始解決了進(jìn)程數(shù)據(jù)訪問問題,現(xiàn)在,可以簡單地通過/proc訪問進(jìn)程數(shù)據(jù) 。

/proc文件系統(tǒng)不是普通意義上的文件系統(tǒng),它是一個到運(yùn)行中進(jìn)程地址空間的訪問接口 。通過/proc,可以用標(biāo)準(zhǔn)Unix系統(tǒng)調(diào)用(比如open()、read()、write()、ioctl()等等)訪問進(jìn)程地址空間 。事實上,Solaris ps(1)命令正是利用/proc獲取進(jìn)程狀態(tài) 。

S (l) 進(jìn)程狀態(tài):

O 正在運(yùn)行
S 休眠: 進(jìn)程正在等待某個事件發(fā)生/完成
R 可運(yùn)行: 進(jìn)程位于運(yùn)行隊列中
Z 僵尸狀態(tài): 進(jìn)程結(jié)束了,但是其父進(jìn)程未處理SIGCHLD信號
T 進(jìn)程暫停: 可能是任務(wù)控制信號所致,或者正在被
跟蹤調(diào)試

/proc下的大文件對應(yīng)運(yùn)行中進(jìn)程的地址空間,不是標(biāo)準(zhǔn)Unix文件 。事實上每個文件名對應(yīng)運(yùn)行中進(jìn)程的PID,文件屬主、屬組對應(yīng)進(jìn)程擁有者的real-uid和primary-gid 。權(quán)限控制與普通Unix文件一樣 。文件大小是最令人迷惑的地方,事實上相當(dāng)好理解,對應(yīng)進(jìn)程內(nèi)存映像大小,并不真正占用硬盤空間,所以你不必?fù)?dān)心空間浪費(fèi)的問題 。不要企圖刪除這些文件!觀察圖A中列舉的/proc例子:

--------------------------------------------------------------------------

$ ls -l /proc
total 43384
-rw------- 1 root root 0 Apr 2 20:07 00000
-rw------- 1 root root 393216 Apr 2 20:07 00001
-rw------- 1 root root 0 Apr 2 20:07 00002
-rw------- 1 root root 0 Apr 2 20:07 00003
-rw------- 1 root root 1695744 Apr 2 20:07 00081
-rw------- 1 root root 1597440 Apr 2 20:07 00083
-rw------- 1 root root 1777664 Apr 2 20:08 00096
-rw------- 1 root root 1683456 Apr 2 20:08 00099
-rw------- 1 root root 1589248 Apr 2 20:08 00101
-rw------- 1 root root 1445888 Apr 2 20:08 00116
-rw------- 1 root root 1404928 Apr 2 20:08 00126
-rw------- 1 root root 798720 Apr 2 20:08 00135
-rw------- 1 root root 1368064 Apr 2 20:08 00195
-rw------- 1 root root 1585152 Apr 2 20:08 00197
-rw------- 1 root root 1368064 Apr 2 20:08 00200
-rw------- 1 root other 225280 Apr 2 20:08 00201
-rw------- 1 root root 1454080 Apr 2 20:08 00203
-rw------- 1 root root 1519616 Apr 2 20:14 00243
-rw------- 1 rthomas wheel 1499136 Apr 2 20:14 00245
-rw------- 1 rthomas wheel 806912 Apr 2 20:16 00261
$

圖A: /proc例子

--------------------------------------------------------------------------

操作/proc下文件的方式和操作普通Unix文件一樣,可以使用所有你熟悉的系統(tǒng)調(diào)用,包括ioctl() 。在內(nèi)核中,針對/proc下文件的vnode操作被轉(zhuǎn)向procfs 。這意味著操作vnode的系統(tǒng)調(diào)用(比如lookuppn())實際上最終轉(zhuǎn)向procfs-savvy系統(tǒng)調(diào)用(比如prlookup()) 。

◆ /proc能告訴我什么

Solaris下使用/proc的工具相當(dāng)完善,位于/usr/proc/bin目錄中 。這些工具提供了一種訪問任意指定進(jìn)程臨界數(shù)據(jù)的簡捷辦法 。比如,想知道一個進(jìn)程已經(jīng)打開了多少文件,你可以使用crash(1M)(見鬼,我不會),但是你是root嗎?不必?fù)?dān)心,可以用/usr/proc/bin/pfiles獲取這種信息,圖B演示了pfiles(1)命令的使用:

--------------------------------------------------------------------------

[scz@ /export/home/scz]> ps
PID TTY TIME CMD
637 pts/3 0:00 bash
[scz@ /export/home/scz]> pfiles 637
637: -bash

推薦閱讀