• <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  評論-173  文章-70  trackbacks-0
            在Linux下面,編寫類似的資源管理器,需要讀取proc下面的很多文件,為此,搜尋了下面的資料,以利于學習和保存!
            總之,可以使用命令來讀取cat /proc/pid/stat(讀取進程信息…………)

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

            /proc 是一個偽文件系統, 被用作內核數據結構的接口, 而不僅僅是解釋說明 /dev/kmem. /proc里的大多數文件都是只讀的, 但也可以通過寫一些文件來改變內核變量.

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

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

            cmdline
            該文件保存了進程的完整命令行. 如果該進程已經被交換出內存, 或者該進程已經僵死, 那么就沒有任何東西在該文件里, 這時候對該文件的讀操作將返回零個字符. 該文件以空字符 null 而不是換行符作為結束標志.
            cwd
            一個符號連接, 指向進程當前的工作目錄. 例如, 要找出進程 20 的 cwd, 你可以:
            cd /proc/20/cwd; /bin/pwd

            請注意 pwd 命令通常是 shell 內置的, 在這樣的情況下可能工作得不是很好.

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

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

            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) 命令可以定位該文件.

            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 上.

            maps
            該文件包含當前的映象內存區及他們的訪問許可.

            格式如下: 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 是進程所占據的地址空間, perms 是權限集: r = read w = write x = execute s = shared p = private (copy on write)

            offset 是文件或者別的什么的偏移量, dev 是設備號(主設備號:從設備號), 而 inode 則是設備的節點號. 0 表明沒有節點與內存相對應, 就象 bss 的情形.

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

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

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

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

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

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


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

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

            kmsg
            可以用該文件取代系統調用 syslog(2) 來記錄內核信息. 但是讀該文件需要超級用戶權限, 并且一次只能有一個進程可以讀該文件, 因而如果一個使用了 syslog(2) 系統調用功能來記錄內核信息的系統日志進程正在運行的話, 別的進程就不能再去讀該偽文件了.

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

            ksyms
            該文件保存了內核輸出的

            posted on 2010-03-08 22:40 deercoder 閱讀(1382) 評論(0)  編輯 收藏 引用 所屬分類: Linux/Unix
            亚洲中文字幕无码一久久区| 久久精品亚洲精品国产欧美| 性做久久久久久久久| 国产精品久久久99| 精品久久久无码中文字幕| 2021久久精品国产99国产精品| 亚洲女久久久噜噜噜熟女| 亚洲成色WWW久久网站| 国内精品人妻无码久久久影院导航| 亚洲精品国产综合久久一线| 亚洲午夜无码AV毛片久久| 久久综合伊人77777| 国产成人综合久久精品红| 波多野结衣久久| 久久99精品久久久久子伦| 久久精品无码专区免费东京热| 少妇久久久久久久久久| 成人免费网站久久久| 国产精品成人久久久久久久| 日韩久久久久中文字幕人妻 | 亚洲AV日韩精品久久久久久| 久久精品国产久精国产一老狼| 精品久久久无码人妻中文字幕| 无码精品久久久天天影视| MM131亚洲国产美女久久| 久久精品成人| 中文字幕无码免费久久| 国产韩国精品一区二区三区久久| 国产精品久久久99| 日产精品久久久一区二区| 国产2021久久精品| 久久精品国产色蜜蜜麻豆| 亚洲国产精品久久久久| 久久精品国产亚洲av麻豆图片| 久久青青草原国产精品免费 | 99久久99久久精品国产| 久久久这里只有精品加勒比| 久久综合久久久| 欧美黑人又粗又大久久久| 人妻无码久久精品| 国产精品九九久久精品女同亚洲欧美日韩综合区 |