`lsof -p <pid> |有什么区别?wc -l和ls / proc / <pid> / fd | wc -l`?


13

背景:我正在监视特定用户运行进程的ulimit。(我偶尔看到过以不正确的限制开始的进程。)我问了几个自称是Linux的大师,一个提出了建议lsof -p <pid>,而另一个提出了建议ls /proc/<pid>/fd,但都没有一个能更准确地反映实际数量的最大值进程的打开文件数限制。

那是什么呢?

lsof -p <pid> | wc -l

要么

ls /proc/<pid>/fd | wc -l

请详细说明区别。谢谢!


3
听起来像功课。
ewwhite 2011年

1
不是功课。添加了更好的解释。我已经阅读了lsof手册页,虽然我怀疑答案是内存映射文件,但我希望得到经验更丰富的人的确认。
杰瑞德(Jared)

Answers:


10

lsof还将为您提供内存映射的.so文件-从技术上讲,它与应用程序可以控制的文件句柄不同。/proc/<pid>/fd是打开文件描述符的测量点-但是:在proc-man页中提到-如果多线程程序的主线程已终止,则该目录将不可用。

lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -l会向您显示与相同的项目ls /proc/<pid>/fd | wc -l

内存映射在中可用/proc/<pid>/maps


lsof为您提供了几乎相同的输出,但它也包括cwdrtdtxt文件描述符。
伊恩·班福斯

另请注意,COMMAND和之间的空格数PID可能会有所不同。用代替空格,[[:space:]]*使其更通用。
伊恩·班福斯

我也在lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l 这里找到,而lsofAndroid shell(adb shell)中的不支持-a-d。所以我最终使用了Kvisle的版本。
周末'18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.