一象踊、前言
Mac OS/Linux 啟用一些服務(wù)的時候,如果非正常退出,再次啟動經(jīng)常會遇到 address already in use
崭放,端口被先前啟動的服務(wù)進(jìn)程所占用鬼吵,導(dǎo)致服務(wù)無法使用扣甲。
這種情況,可以注銷或重啟(注銷不一定有用)齿椅,或在終端中查找占用端口的進(jìn)程并殺死琉挖,然后重啟服務(wù)。
二涣脚、如何查看端口占用情況示辈?
查看端口的命令有netstat、lsof等遣蚀。
2.1. netstat命令
netstat -an | grep 端口號
注意:
OS X 的 netstat 不能查看使用端口的PID/程序名(linux可以)矾麻,建議使用lsof命令代替。
2.2. lsof命令
lsof(list open files)是一個列出當(dāng)前系統(tǒng)打開文件的工具芭梯。
常用命令:
1. 查看指定端口占用情況:
sudo lsof -nP -iTCP:端口號 -sTCP:LISTEN
2. 查看所有進(jìn)程監(jiān)聽的端口:
sudo lsof -nP -iTCP -sTCP:LISTEN
3. 查看所有java進(jìn)程監(jiān)聽的端口:
sudo lsof -nP -iTCP -sTCP:LISTEN | grep java
結(jié)果如下:
java 45380 vision 140u IPv6 0x907f281d0aff1577 0t0 TCP *:53761 (LISTEN)
java 45380 vision 141u IPv6 0x907f281d12df9037 0t0 TCP *:53759 (LISTEN)
java 45380 vision 147u IPv6 0x907f281d1127f597 0t0 TCP *:53762 (LISTEN)
java 45380 vision 154u IPv6 0x907f281d112e2597 0t0 TCP *:8761 (LISTEN)
java 45382 vision 159u IPv6 0x907f281d16a36577 0t0 TCP *:53774 (LISTEN)
java 45382 vision 160u IPv6 0x907f281d16a36017 0t0 TCP *:53772 (LISTEN)
java 45382 vision 166u IPv6 0x907f281d14c7b557 0t0 TCP *:53775 (LISTEN)
java 45382 vision 184u IPv6 0x907f281d16a73fd7 0t0 TCP *:8081 (LISTEN)
4. 輸出占用該端口的 PID:
lsof -nP -iTCP:端口號 |grep LISTEN|awk '{print $2;}'
lsof命令會同時列出PID险耀,方便kill。
- n 表示不顯示主機(jī)名
- P 表示不顯示端口俗稱
- 不加 sudo 只能查看以當(dāng)前用戶運(yùn)行的程序
三. kill進(jìn)程
- 殺掉指定進(jìn)程
找到進(jìn)程的PID,使用kill命令:
kill -9 PID
- 殺掉所有java進(jìn)程:
kill -9 $(sudo lsof -nP -iTCP -sTCP:LISTEN | grep java | awk '{print $2}')