背景:我正在尝试监视特定用户正在运行的进程的 ulimit。 (我偶尔会看到进程以不正确的限制开始。)我问过几个自称 Linux 专家的人,其中一个建议lsof -p <pid>
,而另一个建议ls /proc/<pid>/fd
,但他们都不确定哪个更准确地反映了进程的最大打开文件限制的实际数量。
那么,它是哪一个?
lsof -p <pid> | wc -l
或者
ls /proc/<pid>/fd | wc -l
请详细说明区别。谢谢!
答案1
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
。