若启动服务时出现“Address already in use”错误,需定位占用端口的进程:一、用ss -tulnp查PID和进程名;二、用netstat -tulnp(需sudo);三、用lsof -i :端口;四、用fuser 80/tcp查或-fuser -k终止;五、用ps和/proc/PID/进一步验证进程详情。

如果您在启动服务时收到“Address already in use”错误提示,说明目标端口已被其他进程监听。以下是定位该进程并确认占用来源的多种方法:
一、使用ss命令快速查看端口占用(推荐)
ss是内核级工具,响应快、信息全,现代Linux发行版默认预装,适合日常高效排查。
1、执行基础监听端口扫描:ss -tuln
2、过滤指定端口(例如8080):ss -tuln | grep :8080
3、以root权限显示进程名与PID(关键步骤):sudo ss -tulnp | grep :8080
4、若输出含类似 users:(("nginx",pid=1234,fd=6)),则PID为1234,进程名为nginx。
二、使用netstat命令查看端口占用(兼容旧环境)
netstat属于net-tools套件,部分新版系统(如Ubuntu 22.04+、CentOS 8+)需手动安装,但输出更直观,便于初学者理解网络状态。
1、检查是否已安装netstat,未安装则执行:sudo apt install net-tools(Debian/Ubuntu)或sudo yum install net-tools(CentOS/RHEL)
2、列出所有监听中的TCP/UDP端口:netstat -tuln
3、定位特定端口(如3306):netstat -tuln | grep :3306
4、获取进程信息(必须加sudo):sudo netstat -tulnp | grep :3306
5、解析输出示例:tcp6 0 0 :::3306 :::* LISTEN 1234/mysqld,其中1234为PID,mysqld为进程名。
三、使用lsof命令按进程反查端口
lsof(List Open Files)将端口视为“打开的文件”,可直接关联到进程详情,输出字段丰富,适合深度分析。
1、确认lsof是否可用,否则安装:sudo apt install lsof(Debian/Ubuntu)或sudo yum install lsof(CentOS/RHEL)
2、查询指定端口(如443)占用情况:sudo lsof -i :443
3、识别关键字段:输出中COMMAND列为进程名,PID列为进程ID,NAME列显示绑定地址与协议(如*:https (LISTEN))
4、如需仅筛选监听状态,追加条件:sudo lsof -i :443 | grep LISTEN
四、使用fuser命令一键获取并终止占用进程
fuser专用于识别访问指定文件或套接字的进程,支持直接终止操作,适用于快速释放端口场景。
1、安装fuser(若未预装):sudo apt install psmisc(Debian/Ubuntu)或sudo yum install psmisc(CentOS/RHEL)
2、查询占用某端口的PID(如80):sudo fuser 80/tcp
3、强制终止该端口所有相关进程:sudo fuser -k 80/tcp
4、验证是否释放成功:sudo ss -tuln | grep :80应无输出。
五、结合ps命令确认进程详细信息
当通过上述任一工具获得PID后,需进一步验证进程真实性、运行用户及资源消耗,避免误杀系统关键服务。
1、根据PID(如1234)查看完整进程信息:ps -p 1234 -o pid,ppid,cmd,%mem,%cpu,user,tty,etime
2、检查进程启动路径与参数:cat /proc/1234/cmdline | tr '\0' ' '
3、确认进程所属用户与组:ls -la /proc/1234/exe
4、查看该进程打开的全部网络连接:sudo lsof -p 1234 -i










