lsof打开文件计数不一样

时间:2016-12-14 12:39:11

标签: linux awk lsof

我想知道每个进程打开文件的数量,所以我使用lsof命令:

lsof -n | awk '{print $2}'|sort |uniq -c |sort -nr| more

我发现一个带有pid "934"的进程打开了11374个文件,但是当我使用

lsof -p 934 | wc -l 

有线,结果显示它只打开了122个文件。

以下图片显示了我使用的命令。

enter image description here

2 个答案:

答案 0 :(得分:0)

为什么两个计数不同?

原因一:

lsof生成一个标头,它已计入您的lsof -p xxx,但是,在您的awk过滤中,它被过滤掉了(标头没有$2==pid),所以计数必须不同。但是我们看到差异是>> 1,所以原因二来了。

原因二:(主要原因)

lsof将默认始终输出线程ID(TID读取手册页以获取详细信息)。但是,如果添加-p xxx,则仅列出进程打开的文件,而不显示TID。

如果您想证明这一点,请尝试以下两行:

lsof -p somePid|wc -l

lsof|awk '$2==somePid||NR==1'|wc -l

输出应该相同。

您应该自定义输出格式,以达到目标。

答案 1 :(得分:-2)

@test

尝试这一点,避免使用几个子shell,并在你的lsof后面只有1个awk

对于非gnu sed(缺少lsof -n | awk '{Count[$2]++} END{asorti( Count, PIDs);for( pid in PIDs) print pid "\t" PIDs[pid]}'

asorti