[特殊字符] Mac 高效排查:使用 lsof 查找和管理端口占用进程

💻 Mac 高效排查:使用 lsof 查找和管理端口占用进程

在进行 Web 开发、服务器配置或运行新应用时,我们经常会遇到"端口被占用"的错误。在 macOS 系统上,最强大且最高效的命令行工具是 lsof (List Open Files)。

本文将详细指导您如何使用 lsof 快速查找占用特定端口的进程(以 5001、5002、5003 为例),并提供后续管理进程的完整解决方案。


🔍 第一步:快速查询端口占用情况

打开您的 终端 (Terminal) 应用程序,并输入以下命令。一条命令即可同时查询多个端口的状态:

Bash

复制代码
lsof -i :5001 -i :5002 -i :5003

命令解析

  • lsof: List Open Files,列出系统中打开的文件。
  • -i: 筛选网络文件(Internet file)。
  • :端口号: 指定要筛选的端口号。
sh 复制代码
lsof -i :5001 -i :5002 -i :5003
COMMAND PID       USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Python  240 liuxiaowei    3u  IPv4 0xb9e70756a661c098      0t0  TCP *:commplex-link (LISTEN)

📊 输出结果解读

命令执行后,如果端口被占用,您会看到类似下表的输出。如果某个端口没有任何输出,则表示该端口当前没有被占用

端口 (NAME) 进程状态 (COMMAND) 进程 ID (PID) 用户 (USER) 状态 (STATE)
5001 Python 240 yourname LISTEN
5002 无输出 - - ❌ (端口空闲)
5003 无输出 - - ❌ (端口空闲)
关键信息点:
  • COMMAND 和 PID :这是最关键的信息。它告诉您是哪个应用程序(COMMAND)以及它的唯一进程 ID(PID)占用了该端口。
  • STATE (LISTEN):表示该进程正在该端口上处于"监听"状态,等待传入的连接。

⚙️ 第二步:处理和管理占用进程

查看到进程信息后,您可以根据自己的需要,选择是否终止该进程。

1. 🛑 终止占用端口的进程

确认要结束该进程后,可以使用查到的 PID 来终止它。

Bash

复制代码
kill PID

例如,要结束 PID 为 240 的进程:

Bash

复制代码
kill 240

💡 温馨提示:

  1. 首选柔和关闭 (kill PID)kill 命令(默认发送 SIGTERM 信号)会请求程序自行退出,给程序一个清理资源的机会。

  2. 强制关闭 (kill -9 PID) :如果程序无响应,可以使用 -9 强制终止(发送 SIGKILL 信号)。这是立即、强制的,可能导致数据丢失或损坏。请谨慎使用

    Bash

    复制代码
    kill -9 240

2. 🛡️ 以管理员身份查看(权限不足时)

如果您执行 lsof 命令后发现没有输出,或者提示权限不足,可能是因为占用端口的进程是以系统级权限运行的。此时,您需要使用 sudo 以管理员身份运行命令。

Bash

复制代码
sudo lsof -i :5001 -i :5002

执行此命令后,系统会要求您输入用户密码。


💡 扩展与替代方案

1. 查看所有监听端口

如果想概览本机上所有正在等待连接(监听)的网络端口,可以使用 netstat 命令:

Bash

复制代码
netstat -anp tcp | grep LISTEN

2. 使用图形化工具

对于不习惯使用命令行的用户,macOS 自带的 活动监视器 (Activity Monitor) 也是一个有用的工具:

  1. 打开 活动监视器(位于 /Applications/Utilities/)。
  2. 切换到 网络 标签页。
  3. 通过查看列表中的"端口"或使用搜索栏,您可以找到相关的网络连接和进程信息。

3. 专用于查找 PID 的简化命令

如果您只想知道某个端口的 PID,并将其直接用于 kill 命令,可以组合使用 lsofawk

Bash

复制代码
lsof -t -i :5001 # -t 仅列出 PID

总结来说,在 Mac 上管理端口占用的核心操作就是利用 lsof -i :端口号 在采取任何 kill 操作之前,请务必通过 COMMAND 列确认进程用途,避免误关重要的系统进程或正在运行的重要应用。

相关推荐
上海安当技术5 小时前
固件签名与Secure Boot:安当CAS如何构建汽车固件信任链
网络·汽车·信任链·boot·secure·固件签名·安当cas
上海安当技术6 小时前
诊断接入认证:安当CAS如何堵住汽车网络安全的物理后门
网络·web安全·汽车·access·secure·安当cas·诊断接入认证
ze^06 小时前
【软考信息安全】第2章 网络攻击原理与常用方法
网络·web安全·网络安全
这个DBA有点耶6 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
arbboter7 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
消失的旧时光-19438 小时前
第一篇:Ktor Client 到底是什么?从 Retrofit 迁移理解 Ktor 网络请求架构
网络·架构·retrofit·ktor·dsl
数据知道9 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
江畔柳前堤9 小时前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
LabVIEW开发9 小时前
LabVIEW 通过以太网控制 Yokogawa WT3000 功率分析仪:tmctl.dll 与原始套接字方案
网络·labview·labview知识·labview功能·labview程序
xiaoxiangsiyan10 小时前
企业日常运维高频应用服务全解
运维·网络·云原生·容器·dns