答案1
我正在参考lsof 的联机帮助页对于我的回答。
lsof | grep 4300
如果没有任何选项,lsof 会列出属于所有活动进程的所有打开文件。
因此,此命令列出了属于所有进程的所有打开文件,您已通过管道输出其输出以grep
仅搜索与搜索操作数“4300”匹配的文件。
lsof -i TCP:4300
此选项选择其 Internet 地址与 i 中指定的地址匹配的文件列表。如果未指定地址,则此选项将选择所有 Internet 和 x.25 (HP-UX) 网络文件的列表。
使用此命令,您已指定只希望列出具有 Internet 地址或网络位置的文件,并进一步指定您只希望那些与端口 4300 上的 tcp 协议匹配的文件。
回答您的问题
这两个命令的结果不同,第一个命令是列出所有打开的文件,但输出被 grep 过滤到所有包含“4300”的行。第二个命令指定仅打开在端口 4300 上使用 tcp 协议的 Internet 或网络文件。
根据这个帖子您的进程可以简单地多次打开该文件。这并不是意外的行为
lsof
。这绝对是你的问题,我会研究每个进程正在做什么以及为什么它们需要打开这些文件的多个副本。如果您已包含命令的所有输出,则与第一个命令相比,将有 3 个进程将各自的文件打开 5 次。在第二个命令中,有 3 个进程在端口 4300 上使用 tcp 协议打开网络文件,还有一个进程正在侦听该协议和端口。
我会研究每个进程是基于 pid 的。参考文献这个帖子您可以使用以下命令通过 pid 查找进程:
ps -p <PID> -o comm=
。或者,我在ps aux | grep <PID>
确定流程方面取得了很大的成功。
结论
从这里,您将需要查找这是否是流程的预期行为,以及如果它们是初始错误的原因,则如何补救。不要忘记引用可能与错误和进程关联的任何日志。
如果对此答案有任何误解或疑问,请发表评论。我将根据需要编辑这篇文章以改进答案。
祝你好运!