让 lsof 显示更长的 fd 长度

让 lsof 显示更长的 fd 长度

当我检查一个可以使用超过 10000 个文件描述符的进程时,lsof 仅显示 4 位数字。(也就是说它只能显示 9999)

当超过 10000 时,以星号开头。例如:

COMMAND   PID USER   FD   TYPE    DEVICE SIZE/OFF      NODE NAME
a.out     29944 root 9995u  IPv6 846704101      0t0       TCP 192.168.1.1:rtsp->192.168.1.2:50609 (ESTABLISHED)
a.out     29944 root 9996u  IPv6 846706748      0t0       TCP 192.168.1.1:rtsp->192.168.1.3:50634 (ESTABLISHED)
a.out     29944 root 9997u  IPv6 846708259      0t0       TCP 192.168.1.1:rtsp->192.168.1.4:50657 (ESTABLISHED)
a.out     29944 root *000u  IPv6 846710907      0t0       TCP 192.168.1.1:rtsp->192.168.1.5:50682 (ESTABLISHED)
a.out     29944 root *002u  IPv6 846714817      0t0       TCP 192.168.1.1:rtsp->192.168.1.6:50732 (ESTABLISHED)
a.out     29944 root *003u  IPv6 846720366      0t0       TCP 192.168.1.1:rtsp->192.168.1.5:50763 (ESTABLISHED)
a.out     29944 root *004u  IPv6 846722078      0t0       TCP 192.168.1.1:rtsp->192.168.1.6:50785 (ESTABLISHED)
a.out     29944 root *005u  IPv6 846735778      0t0       TCP 192.168.1.1:rtsp->192.168.1.6:50905 (ESTABLISHED)
a.out     29944 root *006u  IPv6 846736777      0t0       TCP 192.168.1.1:rtsp->192.168.1.16:50930 (CLOSE_WAIT)

我如何才能获得更多信息(更多数字)?

或者我可以使用什么命令来收集某个进程的所有文件描述符?

答案1

因为我遇到了一个类似问题,我也想在这里分享我的发现。我做了一些研究自定义 lsof 输出并发现

lsof 的内部格式选项非常严格......

然而,在阅读了手册页后输出其他程序的输出以及其他 讨论我已经学会了如何排除某些类型的文件描述符(FD),即

lsof -u ${USER} -a -d "^mem,^cwd,^rtd,^txt"

或者如何将 lsof 输出限制为仅数字 FD,即

lsof -u ${USER} -a -d "0-999999"

为了仅列出特定进程 ID (PID) 的数字 FD 并在另一个程序中进一步处理,我使用了以下方法

lsof -p ${PID} -a -d "0-999999" -Ff

我还没有创建并测试更多数量的 FD,但也许它有助于收集您感兴趣的所有描述符。

相关内容