在Mac OS X中,如何获得文件描述符使用的准确计数?

jfk*_*ein 34 unix macos lsof

在Linux上,ulimit -n可用于更改或查看进程的文件描述符数量限制,并且lsof -p nnn | wc -l似乎始终报告实际的文件描述符用法.

但是在Mac OS X上,lsof -p nnn | wc -l可以返回高于限制的数字.我想这意味着lsof返回的不仅仅是文件描述符,但我不知道是什么.

结论:如何在Mac OS X中准确计算文件描述符的使用情况?

Phi*_*mes 42

我最近发现需要识别这个 - 我用来计算总条目的命令(不仅仅是文件句柄,但它的相对因此因此相关的imo)是:

head

这给出了类似下面的输出(您最常用的应用程序可能会有所不同!):

head

我通常只需要查看前10个条目,但您可以操作head以显示任意数量的行.

  • 你应该在调用`uniq`之前"排序"以避免重复的条目:`lsof | awk'{print $ 1}'| 排序| uniq -c | sort -rn | head` (5认同)

smo*_*gan 10

lsof可以显示除文件描述符之外的很多东西,但是大多数可能会使计数膨胀的是应用程序的加载框架和库.您可以查看"FD"列以查看某行是否是文件描述符 - 在这种情况下,它是一个数字,可能后跟一个表示该模式的字母 - 或者其他内容(请参阅中的FD列的说明) lsof手册页的完整列表).

如果你只是需要粗略的近似,在你的wc之前添加一个'grep -v"txt"'会让你更接近一个准确的值.如果您需要精确值,则可能需要将正则表达式放在一起,以便通过FD列精确地通过该文件管理器提供输出.

  • `lsof -d"^ txt"`将避免使用grep的需要. (2认同)

lai*_*e9m 5

我修改了安德斯的回答,现在它只显示特定进程的打开的 fd 号:

FCOUNT=`lsof -p $1 | grep -v " txt " | wc -l`;echo "PID: $1 $FCOUNT" | sort -nk3
Run Code Online (Sandbox Code Playgroud)

例子:

$ ./fd-count.sh 5926                                                                                                           
PID: 5926       97
Run Code Online (Sandbox Code Playgroud)