我知道我可以使用命令
lsof -p xxxx | wc -l
要知道进程中打开的文件数,它是可行的,但是,它效率太低了。我有一些服务器进程有太多套接字文件,wc -l 方法永远不会返回结果。那么,有什么有效的方法可以知道进程中打开了多少个文件呢?
谢谢。
答案1
有一个用于打开文件的 proc 接口:/proc/PID/fd/。它是一个符号链接目录。任何打开的套接字都将显示为链接到名为“socket:[INODE NUMBER]”的文件
答案2
使用ps -C <progname> -o pid= | wc -l
位置程序名称是-listing中进程的名称ps
。
答案3
一些背景(用例场景)可能为答案提供更好的方向。
记录lsof描述了它调用的一些方法,这些方法可能会阻塞很长时间。我建议浏览一下拦截和超时部分lsof请参阅手册页。
您可以尝试以下操作,看看是否能得到理想的结果:
lsof -bwp $pid | wc -l