linux中通过端口号查找进程PID

yaoyue 最后更新于 21 小时前 8 次阅读 519 字


AI 摘要

想快速查出占用端口的进程?用lsof一键锁定PID,轻松掌控系统连接!

在Linux中常用的端口状态检查工具有lsof、netstat。这两个都有查询活动连接端口对应PID的功能。

我平时主要使用lsof来实现此功能。

lsof的主要作用是列出活动进程打开的文件。

  • 参数
-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程(4、6、协议、:端口、 @ip );
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息。

而这里主要用“-i”参数

  • 输出列表含义
COMMAND:进程的名称;
PID:进程标识符;
PPID:父进程标识符(需要指定-R参数);
USER:进程所有者;
PGID:进程所属组;
FD:文件描述符,应用程序通过文件描述符识别该文件。

比如查看22端口的使用情况:

<code>lsof -i:22</code>

image.png

可以看到其中的136382就是当前ssh连接进程的pid,如果关掉这个进程,ssh连接就会立马断开。

image.png


如果想一次性完成上述操作则简化为:

<code>kill -9 </code>lsof -i:22|grep ESTABLISHED |awk '{print $2}'``

其中grep是用来查找包含ESTABLISHED的行,因为直接通过lsof查找出来的结果中包含openssh服务本身,如果关闭则无法再次通过ssh客户端连接上。

awk则是起到字符串分割的作用,lsof -i的输出中第二列是PID,因此使用$2指定输出第二列的值。

此作者没有提供个人介绍。
最后更新于 2025-12-06