我想知道每个进程打开文件的数量,所以我使用lsof命令:
lsof -n | awk '{print $2}'|sort |uniq -c |sort -nr| more
我发现一个带有pid "934"
的进程打开了11374个文件,但是当我使用
lsof -p 934 | wc -l
有线,结果显示它只打开了122个文件。
以下图片显示了我使用的命令。
答案 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