• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-145  評(píng)論-173  文章-70  trackbacks-0
            在Linux下面,編寫類似的資源管理器,需要讀取proc下面的很多文件,為此,搜尋了下面的資料,以利于學(xué)習(xí)和保存!
            總之,可以使用命令來讀取cat /proc/pid/stat(讀取進(jìn)程信息…………)

            =============================================================================

            /proc 是一個(gè)偽文件系統(tǒng), 被用作內(nèi)核數(shù)據(jù)結(jié)構(gòu)的接口, 而不僅僅是解釋說明 /dev/kmem. /proc里的大多數(shù)文件都是只讀的, 但也可以通過寫一些文件來改變內(nèi)核變量.

            下面對(duì)整個(gè) /proc 目錄作一個(gè)大略的介紹.

            [number]
            在 /proc 目錄里, 每個(gè)正在運(yùn)行的進(jìn)程都有一個(gè)以該進(jìn)程 ID 命名的子目錄, 其下包括如下的目錄和偽文件.

            cmdline
            該文件保存了進(jìn)程的完整命令行. 如果該進(jìn)程已經(jīng)被交換出內(nèi)存, 或者該進(jìn)程已經(jīng)僵死, 那么就沒有任何東西在該文件里, 這時(shí)候?qū)υ撐募淖x操作將返回零個(gè)字符. 該文件以空字符 null 而不是換行符作為結(jié)束標(biāo)志.
            cwd
            一個(gè)符號(hào)連接, 指向進(jìn)程當(dāng)前的工作目錄. 例如, 要找出進(jìn)程 20 的 cwd, 你可以:
            cd /proc/20/cwd; /bin/pwd

            請(qǐng)注意 pwd 命令通常是 shell 內(nèi)置的, 在這樣的情況下可能工作得不是很好.

            environ
            該文件保存進(jìn)程的環(huán)境變量, 各項(xiàng)之間以空字符分隔, 結(jié)尾也可能是一個(gè)空字符. 因此, 如果要輸出進(jìn)程 1 的環(huán)境變量, 你應(yīng)該:
            (cat /proc/1/environ; echo) | tr ";\000"; ";\n";

            (至于為什么想要這么做, 請(qǐng)參閱 lilo(8).)

            exe
            也是一個(gè)符號(hào)連接, 指向被執(zhí)行的二進(jìn)制代碼.

            在 Linux 2.0 或者更早的版本下, 對(duì) exe 特殊文件的 readlink(2) 返回一個(gè)如下格式的字符串:

            [設(shè)備號(hào)]:節(jié)點(diǎn)號(hào)

            舉個(gè)例子, [0301]:1502 就是某設(shè)備的 1502 節(jié)點(diǎn), 該設(shè)備的主設(shè)備號(hào)為 03 (如 IDE, MFM 等驅(qū)動(dòng)器), 從設(shè)備號(hào)為 01 (第一個(gè)驅(qū)動(dòng)器的第一分區(qū)).

            而在 Linux 2.2 下, readlink(2) 則給出命令的實(shí)際路徑名.

            另外, 該符號(hào)連接也可以正常析引用(試圖打開 exe 文件實(shí)際上將打開一個(gè)可執(zhí)行文件). 你甚至可以鍵入 /proc/[number]/exe 來運(yùn)行 [number] 進(jìn)程的副本.

            帶 -inum 選項(xiàng)的 find(1) 命令可以定位該文件.

            fd
            進(jìn)程所打開的每個(gè)文件都有一個(gè)符號(hào)連接在該子目錄里, 以文件描述符命名, 這個(gè)名字實(shí)際上是指向真正的文件的符號(hào)連接,(和 exe 記錄一樣).例如, 0 是標(biāo)準(zhǔn)輸入, 1 是標(biāo)準(zhǔn)輸出, 2 是標(biāo)準(zhǔn)錯(cuò)誤, 等等.

            程序有時(shí)可能想要讀取一個(gè)文件卻不想要標(biāo)準(zhǔn)輸入,或者想寫到一個(gè)文件卻不想將輸出送到標(biāo)準(zhǔn)輸出去,那么就可以很有效地用如下的辦法騙過(假定 -i 是輸入文件的標(biāo)志, 而 -o 是輸出文件的標(biāo)志):
            foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
            這樣就是一個(gè)能運(yùn)轉(zhuǎn)的過濾器. 請(qǐng)注意該方法不能用來在文件里搜索, 這是因?yàn)?fd 目錄里的文件是不可搜索的.

            在 UNIX 類的系統(tǒng)下, /proc/self/fd/N 基本上就與 /dev/fd/N 相同. 實(shí)際上, 大多數(shù)的 Linux MAKEDEV 腳本都將 /dev/fd 符號(hào)連接到 [..]/proc/self/fd 上.

            maps
            該文件包含當(dāng)前的映象內(nèi)存區(qū)及他們的訪問許可.

            格式如下: address perms offset dev inode 00000000-0002f000 r-x-- 00000400 03:03 1401 0002f000-00032000 rwx-p 0002f400 03:03 1401 00032000-0005b000 rwx-p 00000000 00:00 0 60000000-60098000 rwx-p 00000400 03:03 215 60098000-600c7000 rwx-p 00000000 00:00 0 bfffa000-c0000000 rwx-p 00000000 00:00 0

            address 是進(jìn)程所占據(jù)的地址空間, perms 是權(quán)限集: r = read w = write x = execute s = shared p = private (copy on write)

            offset 是文件或者別的什么的偏移量, dev 是設(shè)備號(hào)(主設(shè)備號(hào):從設(shè)備號(hào)), 而 inode 則是設(shè)備的節(jié)點(diǎn)號(hào). 0 表明沒有節(jié)點(diǎn)與內(nèi)存相對(duì)應(yīng), 就象 bss 的情形.

            在 Linux 2.2 下還增加了一個(gè)域給可用的路徑名.

            mem
            該文件并不是 mem (1:1) 設(shè)備, 盡管它們有相同的設(shè)備號(hào). /dev/mem 設(shè)備是做任何地址轉(zhuǎn)換之前的物理內(nèi)存, 而這里的 mem 文件是訪問它的進(jìn)程的內(nèi)存.目前這個(gè) mem 還不能 mmap(2) (內(nèi)存映射)出去,而且可能一直要等到內(nèi)核中增加了一個(gè)通用的 mmap(2) 以后才能實(shí)現(xiàn). (也許在你讀本手冊(cè)頁時(shí)這一切已經(jīng)發(fā)生了)
            mmap
            mmap(2) 做的 maps 映射目錄,是和 exe, fd/* 等類似的符號(hào)連接. 請(qǐng)注意 maps 包含了比 /proc/*/mmap 更多的信息, 所以應(yīng)該廢棄 mmap.

            ";0"; 通常指 libc.so.4.

            在 linux 內(nèi)核 1.1.40 里, /proc/*/mmap 被取消了. (現(xiàn)在是 真的 廢棄不用了!)

            root
            依靠系統(tǒng)調(diào)用 chroot(2), unix 和 linux 可以讓每個(gè)進(jìn)程有各自的文件系統(tǒng)根目錄. 由 chroot(2) 系統(tǒng)調(diào)用設(shè)置.根指向文件系統(tǒng)的根,性質(zhì)就象 exe, fd/* 等一樣.
            stat
            進(jìn)程狀態(tài)信息, 被命令 ps(1) 使用.

            現(xiàn)將該文件里各域, 以及他們的 scanf(3)格式說明符, 按順序分述如下:


            pid %d
            進(jìn)程標(biāo)識(shí).
            comm %s
            可執(zhí)行文件的文件名, 包括路徑. 該文件是否可見取決于該文件是否已被交換出內(nèi)存.
            state %c
            ";RSDZT"; 中的一個(gè), R 是正在運(yùn)行, S 是在可中斷的就緒態(tài)中睡眠, D 是在不可中斷的等待或交換態(tài)中睡眠, Z 是僵死, T 是被跟蹤或被停止(由于收到信號(hào)).
            ppid %d
            父進(jìn)程 PID.
            pgrp %d
            進(jìn)程的進(jìn)程組 ID.
            session %d
            進(jìn)程的會(huì)話 ID.
            tty %d
            進(jìn)程所使用終端.
            tpgid %d
            當(dāng)前擁有該進(jìn)程所連接終端的進(jìn)程所在的進(jìn)程組 ID.
            flags %u
            進(jìn)程標(biāo)志. 目前每個(gè)標(biāo)志都設(shè)了數(shù)學(xué)位, 所以輸出里就不包括該位. crt0.s 檢查數(shù)學(xué)仿真這可能是一個(gè)臭蟲, 因?yàn)椴皇敲總€(gè)進(jìn)程都是用 c 編譯的程序. 數(shù)學(xué)位應(yīng)該是十進(jìn)制的 4, 而跟蹤位應(yīng)該是十進(jìn)制的 10.
            minflt %u
            進(jìn)程所導(dǎo)致的小錯(cuò)誤(minor faults)數(shù)目, 這樣的小錯(cuò)誤(minor faults)不需要從磁盤重新載入一個(gè)內(nèi)存頁.
            cminflt %u
            進(jìn)程及其子進(jìn)程所導(dǎo)致的小錯(cuò)誤(minor faults)數(shù)目.
            majflt %u
            進(jìn)程所導(dǎo)致的大錯(cuò)誤(major faults)數(shù)目, 這樣的大錯(cuò)誤(major faults)需要重新載入內(nèi)存頁.
            cmajflt %u
            進(jìn)程及其子進(jìn)程所導(dǎo)致的大錯(cuò)誤(major faults)數(shù)目.
            utime %d
            進(jìn)程被調(diào)度進(jìn)用戶態(tài)的時(shí)間(以 jiffy 為單位, 1 jiffy=1/100 秒,另外不同硬件體系略有不同).
            stime %d
            進(jìn)程被調(diào)度進(jìn)內(nèi)核態(tài)的時(shí)間, 以 jiffy 為單位.
            cutime %d
            進(jìn)程及其子進(jìn)程被調(diào)度進(jìn)用戶態(tài)的時(shí)間, 以 jiffy 為單位.
            cstime %d
            進(jìn)程及其子進(jìn)程被調(diào)度進(jìn)內(nèi)核態(tài)的時(shí)間, 以 jiffy 為單位.
            counter %d
            如果進(jìn)程不是當(dāng)前正在運(yùn)行的進(jìn)程, 就是進(jìn)程在下個(gè)時(shí)間片當(dāng)前可以擁有的最大時(shí)間, 以 jiffy 為單位. 如果進(jìn)程是當(dāng)前正在運(yùn)行的進(jìn)程, 就是當(dāng)前時(shí)間片中所剩下 jiffy 數(shù)目.
            priority %d
            標(biāo)準(zhǔn)優(yōu)先數(shù)只再加上 15, 在內(nèi)核里該值總是正的.
            timeout %u
            當(dāng)前至進(jìn)程的下一次間歇時(shí)間, 以 jiffy 為單位.
            itrealvalue %u
            由于計(jì)時(shí)間隔導(dǎo)致的下一個(gè) SIGALRM 發(fā)送進(jìn)程的時(shí)延,以 jiffy 為單位.
            starttime %d
            進(jìn)程自系統(tǒng)啟動(dòng)以來的開始時(shí)間, 以 jiffy 為單位.
            vsize %u
            虛擬內(nèi)存大小.
            rss %u
            Resident Set Size(駐留大小): 進(jìn)程所占用的真實(shí)內(nèi)存大小, 以頁為單位, 為便于管理而減去了 3. rss 只包括正文, 數(shù)據(jù)以及堆棧的空間, 但不包括尚未要求裝入內(nèi)存的或已被交換出去的.
            rlim %u
            當(dāng)前進(jìn)程的 rss 限制, 以字節(jié)為單位, 通常為 2,147,483,647.
            startcode %u
            正文部分地址下限.
            endcode %u
            正文部分地址上限.
            startstack %u
            堆棧開始地址.
            kstkesp %u
            esp(32 位堆棧指針) 的當(dāng)前值, 與在進(jìn)程的內(nèi)核堆棧頁得到的一致.
            kstkeip %u
            EIP(32 位指令指針)的當(dāng)前值.
            signal %d
            待處理信號(hào)的 bitmap(通常為 0).
            blocked %d
            被阻塞信號(hào)的 bitmap(對(duì) shell 通常是 0, 2).
            sigignore %d
            被忽略信號(hào)的 bitmap.
            sigcatch %d
            被俘獲信號(hào)的 bitmap.
            wchan %u
            進(jìn)程在其中等待的通道, 實(shí)際是一個(gè)系統(tǒng)調(diào)用的地址. 如果你需要文本格式的, 也可以在名字列表中找到. (如果有最新版本的 /etc/psdatabase, 你可以在 ps -l 的結(jié)果中的 WCHAN 域看到)
            cpuinfo
            保存了CPU 以及體系架構(gòu)依賴條目的列表. 對(duì)于不同的系統(tǒng)架構(gòu)有不同的列表, 共有的兩項(xiàng)是 cpuBogoMIPS, cpu 可能是當(dāng)前在用的 CPU, 而 BogoMIPS 則是內(nèi)核初始化時(shí)計(jì)算出的一個(gè)系統(tǒng)常數(shù).
            devices
            主設(shè)備號(hào)及設(shè)備組的列表, 文本格式. MAKEDEV 腳本使用該文件來維持內(nèi)核的一致性.
            dma
            一個(gè)列表, 指出正在使用的ISA DMA (直接內(nèi)存訪問)通道.
            filesystems
            以文本格式列出了被編譯進(jìn)內(nèi)核的文件系統(tǒng). 當(dāng)沒有給 mount(1) 指明哪個(gè)文件系統(tǒng)的時(shí)候, mount(1) 就依靠該文件遍歷不同的文件系統(tǒng).
            interrupts
            該文件以 ASCII 格式記錄了(至少是在 i386 體系上的)每次 IRQ 的中斷數(shù)目.
            ioports
            該文件列出了當(dāng)前在用的已注冊(cè) I/O 端口范圍.
            kcore
            該偽文件以 core 文件格式給出了系統(tǒng)的物理內(nèi)存映象, 再利用未卸載的內(nèi)核 (/usr/src/linux/tools/zSystem), 我們就可以用 GDB 查探當(dāng)前內(nèi)核的任意數(shù)據(jù)結(jié)構(gòu).

            該文件的總長度是物理內(nèi)存 (RAM) 的大小再加上 4KB.

            kmsg
            可以用該文件取代系統(tǒng)調(diào)用 syslog(2) 來記錄內(nèi)核信息. 但是讀該文件需要超級(jí)用戶權(quán)限, 并且一次只能有一個(gè)進(jìn)程可以讀該文件, 因而如果一個(gè)使用了 syslog(2) 系統(tǒng)調(diào)用功能來記錄內(nèi)核信息的系統(tǒng)日志進(jìn)程正在運(yùn)行的話, 別的進(jìn)程就不能再去讀該偽文件了.

            該文件的內(nèi)容可以用 dmesg(8) 來察看.

            ksyms
            該文件保存了內(nèi)核輸出的

            posted on 2010-03-08 22:40 deercoder 閱讀(1382) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux/Unix
            久久香蕉国产线看观看猫咪?v| 日韩精品久久久久久久电影蜜臀 | 无码国内精品久久人妻麻豆按摩| 97久久超碰国产精品2021| 亚洲va中文字幕无码久久不卡| 久久久久无码国产精品不卡| 久久久久国产精品麻豆AR影院 | 久久影院午夜理论片无码| 天天久久狠狠色综合| 99久久精品免费| 久久青青草原精品国产不卡| 日韩va亚洲va欧美va久久| 国产精品亚洲综合久久| 色妞色综合久久夜夜| 午夜人妻久久久久久久久| 久久A级毛片免费观看| 日本福利片国产午夜久久| 欧美日韩中文字幕久久久不卡| 久久只有这里有精品4| 精品无码久久久久久尤物| 国产成人久久精品麻豆一区| 久久无码一区二区三区少妇| 久久精品人人做人人爽电影| 久久精品中文字幕无码绿巨人| 久久99国产精品99久久 | 久久国产成人| 狠狠色丁香久久婷婷综合_中| 亚洲精品无码久久千人斩| 99久久伊人精品综合观看| 亚洲欧洲久久久精品| 国产精品免费看久久久| 久久精品无码一区二区三区日韩| 无码任你躁久久久久久老妇App| 久久香综合精品久久伊人| 精品久久久久久无码人妻蜜桃| 久久精品中文无码资源站| 热99re久久国超精品首页| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 精品综合久久久久久98| 国产精品综合久久第一页 | 色综合色天天久久婷婷基地|