查找在特定端口上运行的进程并终止它

Published on
Published on
/2 mins read/---

仅限MacOS

列出所有按端口分组的进程及其PID

sudo lsof -i -P | grep LISTEN

结果应该如下所示:

rapportd    123            leo    5u  IPv4 0x84512a8572c9xxxx      0t0    TCP *:62003 (LISTEN)
rapportd    123            leo    6u  IPv6 0x84512a857627xxxx      0t0    TCP *:62003 (LISTEN)
mongod      414            leo    9u  IPv4 0x84512a857926xxxx      0t0    TCP localhost:27017 (LISTEN)
Loom       3315            leo   28u  IPv4 0x84512a85785cxxxx      0t0    TCP localhost:11223 (LISTEN)
node      38238            leo   22u  IPv6 0x84512a857627xxxx      0t0    TCP *:5000 (LISTEN)
node      68336            leo   22u  IPv6 0x84512a858bb4xxxx      0t0    TCP *:443 (LISTEN)

第2列是最后一列端口上进程的PID

现在使用 sudo kill -9 <PID> 终止该端口上的进程

sudo kill -9 68336

68336 是在端口 443 上运行的进程的PID

再次检查

$ sudo lsof -i -P | grep LISTEN
 
rapportd    123            leo    5u  IPv4 0x84512a8572c9xxxx      0t0    TCP *:62003 (LISTEN)
rapportd    123            leo    6u  IPv6 0x84512a857627xxxx      0t0    TCP *:62003 (LISTEN)
mongod      414            leo    9u  IPv4 0x84512a857926xxxx      0t0    TCP localhost:27017 (LISTEN)
Loom       3315            leo   28u  IPv4 0x84512a85785cxxxx      0t0    TCP localhost:11223 (LISTEN)
node      38238            leo   22u  IPv6 0x84512a857627xxxx      0t0    TCP *:5000 (LISTEN)

端口 443 上的进程已经停止了!

更简便的方法

如果你知道具体的端口号,可以直接使用以下命令:

# 查找占用特定端口的进程
sudo lsof -i :端口号
 
# 例如查找占用端口3000的进程
sudo lsof -i :3000

或者一行命令直接终止占用特定端口的进程:

# 终止占用端口3000的进程
sudo kill -9 $(sudo lsof -t -i:3000)

命令解释

  • lsof: List Open Files - 列出打开的文件
  • -i: 显示网络连接
  • -P: 显示端口号而不是服务名
  • -t: 仅显示PID(与kill命令配合使用)
  • kill -9: 强制终止进程(SIGKILL信号)

Cheers