You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查找macOS上监听指定端口的PID 解决bash脚本启动服务端口占用问题

macOS下获取指定端口监听PID的方法

macOS 系统可以直接用 lsof 命令获取指定端口的监听进程PID,参数 -t 会过滤掉其他输出只返回PID值,非常适合在脚本中调用:

# 获取3001端口的监听PID
lsof -ti :3001

如果对应端口没有进程监听,命令会返回空,你可以在杀进程的时候加错误忽略,避免脚本报错:

# 杀死3001端口的进程,没有对应进程时不抛出错误
kill $(lsof -ti :3001) 2>/dev/null

写入.pid文件的实现方式

完全可以将启动的进程PID写入.pid文件,后续停止服务时直接读取文件中的PID杀死进程即可,比每次查询端口效率更高,也不会误杀其他占用端口的无关进程。
bash 中可以用内置变量 $! 获取最近一个后台运行进程的PID,启动进程后直接写入文件即可。


修改后的完整启动脚本示例

#!/usr/bin/env bash

export PORT="3001"
export API_PORT="5001"
export MAIN_URL="http://localhost:"

# 先杀死占用对应端口的旧进程
kill $(lsof -ti :$PORT) 2>/dev/null
kill $(lsof -ti :$API_PORT) 2>/dev/null

# 启动前端服务,写入PID文件
cd Client
npm run dev &
echo $! > ../client.pid
cd ..

# 启动后端服务,写入PID文件
nodemon index.js &
echo $! > server.pid

如果需要单独写一个停止服务的脚本,可以参考如下内容:

#!/usr/bin/env bash

# 读取PID文件杀死进程,删除PID文件
kill $(cat client.pid) 2>/dev/null && rm -f client.pid
kill $(cat server.pid) 2>/dev/null && rm -f server.pid

内容的提问来源于stack exchange,提问作者TheMachineX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:15:03