当我检查一个可以使用超过 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,但也许它有助于收集您感兴趣的所有描述符。