为什么'lsof -p'之间有很大差异| wc -l` 和 `lsof | grep| wc -l`

为什么'lsof -p'之间有很大差异| wc -l` 和 `lsof | grep| wc -l`

我发现elasticsearchUbntu 14.04 linux vm 中的进程持有许多文件处理程序,而当我使用 lsof 进行进一步分析时,它只会给出一些令人困惑的结果,如下所示:

$ lsof -p | wc -l

$ lsof -p 63589 | wc -l
960

COMMAND      PID    TID       USER   FD      TYPE             DEVICE   SIZE/OFF       NODE NAME
java       63589              ubuntu  mem       REG             202,65    5614666    8627864 /var/elasticsearch/nodes/0/indices/jetty/1/index/_2uid_Lucene41_0.tim

$ lsof -n | grep | wc -l

$ lsof -n | grep 63589 | wc -l
111268

COMMAND      PID    TID       USER   FD      TYPE             DEVICE   SIZE/OFF       NODE NAME
java       63589  12817       ubuntu  625r      REG             202,65       5014    8627698 /var/elasticsearch/nodes/0/indices/cde_api_server/1/index/_3h65.cfs
java       63589  63611       ubuntu  207u     0000                0,9          0       7413 anon_inode
java       63589  63611       ubuntu  208r     FIFO                0,8        0t0     737362 pipe

似乎如果使用 lsof-p,结果中不会有 TID?但它应该列出 pid 63589 的所有文件描述符,对吗?

960 与 111268 的差别如此之大,有人能帮忙解释一下吗?

答案1

你试试这个怎么样?

lsof -n | grep 63589 | head -100

“lsof” 是打开文件的列表。因此,每次您都可以得到不同的结果。但是,960 和 111268 相差太大了。可能存在类似 PID 的进程(例如 163589 包括 63589)。因此,请检查“lsof -n | grep”的结果

答案2

第一个命令

lsof -p 63589

将显示 id 为 63589 的进程的所有打开的文件

第二个

lsof -n | grep 63589

将显示由进程 63589 打开的文件以及由 63589 进程创建的线程(这就是 TIP 列存在的原因)。第二个命令计算出更多结果完全正常。

相关内容