lsof -p PID 与 lsof | grep PID

IL *_*are 13 process lsof

我不明白 lsof 命令的输出。

当我写

lsof -p PID
Run Code Online (Sandbox Code Playgroud)

我得到 4 行,当我写

lsof | grep PID
Run Code Online (Sandbox Code Playgroud)

我得到数百行。

它不应该返回相同的结果吗?

谢谢你的回复。这里是输出。看起来是子流程还是这个任务是什么意思?

lsof -p 29076
COMMAND   PID  USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
java    29076  pr    cwd   unknown                      /proc/29076/cwd (readlink: Permission denied)
java    29076  pr    rtd   unknown                      /proc/29076/root (readlink: Permission denied)
java    29076  pr    txt   unknown                      /proc/29076/exe (readlink: Permission denied)
java    29076  pr   NOFD                                /proc/29076/fd (opendir: Permission denied)

lsof |grep 29076|head -20
java      29076        pr  cwd   unknown                          /proc/29076/cwd (readlink: Permission denied)
java      29076        pr  rtd   unknown                          /proc/29076/root (readlink: Permission denied)
java      29076        pr  txt   unknown                          /proc/29076/exe (readlink: Permission denied)
java      29076        pr NOFD                                    /proc/29076/fd (opendir: Permission denied)
java      29076   300  pr  cwd   unknown                          /proc/29076/task/300/cwd (readlink: Permission denied)
java      29076   300  pr  rtd   unknown                          /proc/29076/task/300/root (readlink: Permission denied)
java      29076   300  pr  txt   unknown                          /proc/29076/task/300/exe (readlink: Permission denied)
java      29076   300  pr NOFD                                    /proc/29076/task/300/fd (opendir: Permission denied)
java      29076   329  pr  cwd   unknown                          /proc/29076/task/329/cwd (readlink: Permission denied)
java      29076   329  pr  rtd   unknown                          /proc/29076/task/329/root (readlink: Permission denied)
java      29076   329  pr  txt   unknown                          /proc/29076/task/329/exe (readlink: Permission denied)
java      29076   329  pr NOFD                                    /proc/29076/task/329/fd (opendir: Permission denied)
java      29076   330  pr  cwd   unknown                          /proc/29076/task/330/cwd (readlink: Permission denied)
java      29076   330  pr  rtd   unknown                          /proc/29076/task/330/root (readlink: Permission denied)
java      29076   330  pr  txt   unknown                          /proc/29076/task/330/exe (readlink: Permission denied)
java      29076   330  pr NOFD                                    /proc/29076/task/330/fd (opendir: Permission denied)
java      29076   331  pr  cwd   unknown                          /proc/29076/task/331/cwd (readlink: Permission denied)
java      29076   331  pr  rtd   unknown                          /proc/29076/task/331/root (readlink: Permission denied)
java      29076   331  pr  txt   unknown                          /proc/29076/task/331/exe (readlink: Permission denied)
java      29076   331  pr NOFD                                    /proc/29076/task/331/fd (opendir: Permission denied)
Run Code Online (Sandbox Code Playgroud)

Dav*_*ing 7

没有看到实际输出,很难确切地说出发生了什么,但我猜这是因为该lsof -p PID命令只是打印出由指定 PID 打开的文件,同时lsof | grep PID打印出“PID”所在的任何行位于线路中的任何位置。例如,如果您正在搜索 PID=123,那么您的grep选项还将打印 PID 的 1231、1232、1233 等行以及位于完整路径中任何位置为 123 的文件夹中的任何文件。

编辑:在您的具体示例中,不同之处在于lsof忽略线程打开的文件。如果查看grep示例中的输出,第三列是“TID”或线程 ID。没有 TID 的行与您使用该-p选项时看到的相匹配。带有 TID 的行(即由其他线程打开的行)是额外的。