1. PROC在匯編中是什麼意思
proc是定義子程序的偽指令,位置在子程序的開始處,它和endp分別表示子程序定義的開始和結束兩者必須成對出現。
proc文件系統如上所述的特殊性,其內的文件也常被稱作虛擬文件,並具有一些獨特的特點。例如,其中有些文件雖然使用查看命令查看時會返回大量信息,但文件本身的大小卻會顯示為0位元組。此外,這些特殊文件中大多數文件的時間及日期屬性通常為當前系統時間和日期,這跟它們隨時會被刷新(存儲於RAM中)有關。
為了查看及使用上的方便,這些文件通常會按照相關性進行分類存儲於不同的目錄甚至子目錄中,如/proc/scsi目錄中存儲的就是當前系統上所有SCSI設備的相關信息,/proc/N中存儲的則是系統當前正在運行的進程的相關信息,其中N為正在運行的進程(可以想像得到,在某進程結束後其相關目錄則會消失)。
大多數虛擬文件可以使用文件查看命令如cat、more或者less進行查看,有些文件信息表述的內容可以一目瞭然,但也有文件的信息卻不怎麼具有可讀性。不過,這些可讀性較差的文件在使用一些命令如apm、free、lspci或top查看時卻可以有著不錯的表現。
用法:
proc中的SQL語句不要加分號(;),注釋如果是C++工程使用如果是C++使用//或者,在oracle中的注釋是--,oracle資料庫中的數據如果數據位元組不足位數,默認用空格補全,宿主變數的空間要大於資料庫的欄位空間。
對於結構的特殊含義處理:sqlca.sqlcode==1403表示結束了查找循環,這個在動態sql語句中比較重要,
sqlca.sqlcode==-1405表示查詢值為空的時候報的錯誤,這個最好留給返回值待程序處理,
sqlca.sqlcode==-1480表示在sql語句中傳入的變數時空值一般就是傳值失敗,可能是空間的大小問題。
關於Proc中特殊的SQL語句,如,delete,update,alter,insert into等數據變動性操作的時候,
要注意2點,可以再宿主變數區申請復雜的結構類型的指針,用指針將參數外部的數據綁定到sql語句中,接下來就是提交事物,操作完變動性數據之後就是commint提交事物,進行回滾。
進程目錄中的常見文件介紹
/proc目錄中包含許多以數字命名的子目錄,這些數字表示系統當前正在運行進程的進程號,裡麵包含對應進程相關的多個信息文件。
[root rhel5~]#ll/proc
total 0
dr-xr-xr-x 5 root root 0 Feb 8 17:08 1
dr-xr-xr-x 5 root root 0 Feb 8 17:08 10
dr-xr-xr-x 5 root root 0 Feb 8 17:08 11
dr-xr-xr-x 5 root root 0 Feb 8 17:08 1156
dr-xr-xr-x 5 root root 0 Feb 8 17:08 139
dr-xr-xr-x 5 root root 0 Feb 8 17:08 140
dr-xr-xr-x 5 root root 0 Feb 8 17:08 141
dr-xr-xr-x 5 root root 0 Feb 8 17:09 1417
dr-xr-xr-x 5 root root 0 Feb 8 17:09 1418
2. linux的進程運行在哪個文件夾下
linux下進程運行後,進程信息存儲在/proc/進程id
目錄下面,進程id查看命令
ps
-ef
|
grep
進程名,vi
/proc/進程id/environ
搜索PWD欄位,則是該進程運行所在目錄
3. 求LINUX系統中,對proc文件系統的理解。
/proc
文件系統是
GNU/Linux
特有復的制。它是一個虛擬的文件系統,因此在該目錄中的所有文件都不會消耗磁碟空間。通過它能夠非常簡便地了解系統信息,尤其是其中的大部分文件是人類可閱讀的(不過還是需要一些幫助)。許多程序實際上只是從
/proc
的文件中收集信息,然後按照它們自己的格式組織後顯示出來。有一些顯示進程信息的程序(top、ps
等)就是這么作的。/proc
還是了解您系統硬體的好去處。就象那些顯示進程信息的程序一樣,不少程序只是提供了獲取
/proc
中信息的介面。
其中還有一個特殊的子目錄:/proc/sys。它讓您能夠顯示內核參數並更改它們,而且這一更改將立即生效。
4. /proc文件系統的作用
proc 文件系統
在Linux中有額外的機制可以為內核和內核模塊將信息發送給進程-- /proc
文件系統。最初設計的目的是允許更方便的對進程信息進行訪問(因此得名),現在它被每一個有有趣的東西報告的內核使用,例如/proc/moles
有模塊的列表/proc/meminfo 有內存使用的統計表。
使用proc 文件系統的方法和使用設備驅動程序非常相似--創建一個/proc
文件需要的所有信息的結構,包括任何處理函數的指針(在我們的例子中只有一個,當某人試圖從/proc
文件讀時調用的那一個)。然後,init_mole 在內核中登記該結構而cleanup_mole 注銷它。
我們使用proc_register_dynamic(這是在2.0 版中的情況,在2.2 版中如果我們將節點設置為0系統將自動為我們做到)
的原因是我們不想預先決定我們的文件的節點數字,而是為防止沖突而由內核決定它。通常的文件系統存在於磁碟上而不是內存中(/proc
在內存中),在這中情況下,節點數是是指向文件的索引節點所在的磁碟位置的指針。節點包含文件的信息(例如文件的存取許可權)和指向磁碟位置或文件數據可以
被找到的幾個位置的指針。
因為當文件被打開或關閉的時候不能得到調用,所以在這個模塊中沒有地方放置MOD_INC_USE_COUNT
和MOD_DEC_USE_COUNT,並且,如果文件被打開隨後模塊被移除,我們沒有辦法避免後果。在下一章我們會看到一個艱難的但更靈活的可以處理
/proc文件的實現方式,它也可以讓我們防止那個問題。
Linux 內核提供了一種通過/proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制。盡管在各種硬體平台上的Linux
系統的/proc 文件系統的基本概念都是相同的,但本文只討論基於intel x86 架構的Linux /proc 文件系統。
_________________ _________________ _________________
/proc --- 一個虛擬文件系統
/proc 文件系統是一種內核和內核模塊用來向進程(process)
發送信息的機制(所以叫做/proc)。這個偽文件系統讓你可以和內核內部數據結構進行交互,獲取 有關進程的有用信息,在運行中(on the
fly) 改變設置(通過改變內核參數)。 與其他文件系統不同,/proc 存在於內存之中而不是硬碟上。如果你察看文件/proc/mounts
(和mount 命令一樣列出所有已經載入的文件系統),你會看到其中 一行是這樣的:
grep proc /proc/mounts
/proc /proc proc rw 0 0
/proc 由內核控制,沒有承載/proc 的設備。因為/proc
主要存放由內核控制的狀態信息,所以大部分這些信息的邏輯位置位於內核控制的內存。對/proc 進行一次'ls -l' 可以看到大部分文件都是0
位元組大的;不過察看這些文件的時候,確實可以看到一些信息。這怎麼可能?這是因為/proc
文件系統和其他常規的文件系統一樣把自己注冊到虛擬文件系統層(VFS) 了。然而,直到當VFS 調用它,請求文件、目錄的i-node
的時候,/proc 文件系統才根據內核中的信息建立相應的文件和目錄。
載入proc 文件系統
如果系統中還沒有載入proc 文件系統,可以通過如下命令載入proc 文件系統:
mount -t proc proc /proc
上述命令將成功載入你的proc 文件系統。
proc 文件系統可以被用於收集有用的關於系統和運行中的內核的信息。下面是一些重要的文件:
* /proc/cpuinfo - CPU 的信息(型號, 家族, 緩存大小等)
* /proc/meminfo - 物理內存、交換空間等的信息
* /proc/mounts - 已載入的文件系統的列表
* /proc/devices - 可用設備的列表
* /proc/filesystems - 被支持的文件系統
* /proc/moles - 已載入的模塊
* /proc/version - 內核版本
* /proc/cmdline - 系統啟動時輸入的內核命令行參數
proc 中的文件遠不止上面列出的這么多。想要進一步了解的讀者可以對/proc
的每一個文件都'more'一下或讀參考文獻[1]獲取更多的有關/proc
目錄中的文件的信息。我建議使用'more'而不是'cat',除非你知道這個文件很小,因為有些文件(比如kcore) 可能會非常長。
通過/proc 與內核交互
上面討論的大部分/proc 的文件是只讀的。而實際上/proc 文件系統通過/proc 中可讀寫的文件提供了對內核的交互機制。寫這些文件可以改變內核的狀態,因而要慎重改動這些文件。/proc/sys 目錄存放所有可讀寫的文件的目錄,可以被用於改變內核行為。
/proc/sys/kernel - 這個目錄包含反通用內核行為的信息。/proc/sys/kernel/{domainname, hostname} 存放著機器/網路的域名和主機名。這些文件可以用於修改這些名字。
$ hostname
machinename.domainname.com
$ cat /proc/sys/kernel/domainname
domainname.com
$ cat /proc/sys/kernel/hostname
machinename
$ echo "new-machinename" > /proc/sys/kernel/hostname
$ hostname
new-machinename.domainname.com
這樣,通過修改/proc 文件系統中的文件,我們可以修改主機名。很多其他可配置的文件存在於/proc/sys/kernel/。這里不可能列出所有這些文件,讀者可以自己去這個目錄查看以得到更多細節信息。
另一個可配置的目錄是/proc/sys/net。這個目錄中的文件可以用於修改機器/網路的網路屬性。比如,簡單修改一個文件,你可以在網路上癮藏匿的計算機。
$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
這將在網路上癮藏你的機器,因為它不響應icmp_echo。主機將不會響應其他主機發出的ping 查詢。
$ ping machinename.domainname.com
no answer from machinename.domainname.com
要改回預設設置,只要
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/proc/sys 下還有許多其它可以用於改變內核屬性。讀者可以通過參考文獻[1], [2] 獲取更多信息。
結論
/proc 文件系統提供了一個基於文件的Linux 內部介面。它可以用於確定系統的各種不同設備和進程的狀態。對他們進行配置。因而,理解和應用有關這個文件系統的知識是理解你的Linux 系統的關鍵。