1)爲了獲得打開的文件描述符的總數,是否可以循環使用/proc
? 我用下面的顯示目錄:Linux實現打開的文件描述符C
/proc/PID/fd/*
/proc/PID/maps
/proc/PID/cwd
/proc/PID/root
/proc/PID/exe
2)的數目不同於lsof | wc -l
和cat /proc/sys/fs/file-nr
3)加載動態鏈接庫和當前工作目錄可以算作打開文件描述符? 實現在C中的所有打開的文件描述符的Linux
1)爲了獲得打開的文件描述符的總數,是否可以循環使用/proc
? 我用下面的顯示目錄:Linux實現打開的文件描述符C
/proc/PID/fd/*
/proc/PID/maps
/proc/PID/cwd
/proc/PID/root
/proc/PID/exe
2)的數目不同於lsof | wc -l
和cat /proc/sys/fs/file-nr
3)加載動態鏈接庫和當前工作目錄可以算作打開文件描述符? 實現在C中的所有打開的文件描述符的Linux
你怎麼指望這取決於你是什麼樣的信息感興趣。
通過/proc/PID/fd/*
展望會給你打開的文件描述符的數量。但是,有一點需要注意的是,兩個進程可能實際上共享一個文件描述符,如果分叉,那麼子進程會從其父進程繼承文件描述符,然後此方法將計算兩次,每個進程計數一次。
/proc/PID/maps
將向您顯示進程的內存映射,其中可以包括加載的可執行文件本身和動態鏈接的庫,但也包括與堆,堆棧,vdso
節等文件不對應的內容內核導出的虛擬共享對象,等等。
lsof
將列出文件可以使用的各種方式,其中不僅包括文件描述符,它也包括可執行文件和共享庫,但不包括不對應於在/proc/PID/maps
像棧,堆vdso
部顯示的文件存儲區域等
/proc/sys/fs/file-nr
將報告數量不限內核文件句柄。內核文件句柄不同於文件描述符;可以有多個文件描述符打開,指向相同的文件句柄,例如通過調用dup
或dup2
。
這些差異可以解釋爲什麼從這些不同的計數方式中獲得不同的數字。問題是,你使用這個計數的目的是什麼?這將有助於回答您應該實際使用哪種計數方式。
1)沒有,但似乎你都搞不清楚是什麼構成一個打開的文件描述符,通過你的第二個問題
2)看http://codingtragedy.blogspot.com/2015/04/nofile-ulimit-n-rlimitnofile-most.html的建議 - 雖然它解釋了對似乎不相關的資源限制的處理,它還解釋了文件描述符與最有可能需要的「結構文件」之間的區別,它甚至涵蓋了您的使用情況。
3)同樣,目前還不清楚你的實際問題是什麼。當前工作目錄不是文件描述符,並且只用inode表示。一個進程可能會或可能不會爲鏈接庫保留fd,但映射本身佔用一個「結構文件」。
謝謝你的回答,非常豐富。目的是監視打開的文件描述符,據我所知,我不需要查看映射和文件nr。 – Adelina