![](/img/trans.png)
[英]How do I pipe output from node stdout to open command in Mac terminal?
[英]How do I close an open port from the terminal on the Mac?
我從 java 類中打開端口 #5955 以與客戶端通信。 完成后如何關閉此端口? 還有哪個命令可以告訴我端口是打開還是關閉?
找出占用您想要釋放的端口號(例如 5955)的進程 ID (PID)
sudo lsof -i :5955
使用其 PID 殺死當前正在使用該端口的進程
sudo kill -9 PID
要查找該過程,請嘗試:
sudo lsof -i :portNumber
使用其 PID 殺死當前正在使用該端口的進程
kill PID
然后檢查端口是否關閉。 如果沒有,請嘗試:
kill -9 PID
如果前一個不起作用,我只會執行以下操作
sudo kill -9 PID
只是為了安全。 再次取決於您打開端口的方式,這可能無關緊要。
在 2018 年,這對我使用 MacOS HighSierra 有用:
sudo lsof -nPi :yourPortNumber
然后:
sudo kill -9 yourPIDnumber
很簡單的找到5900端口:
sudo lsof -i :5900
然后將 59553 視為 PID
sudo kill 59553
無論您如何打開端口,都以相同的方式關閉它。 例如,如果您創建了一個套接字,將其綁定到端口 0.0.0.0:5955,並調用 listen,關閉同一個套接字。
您也可以直接終止打開端口的進程。
如果您想找出哪個進程打開了端口,請嘗試以下操作:
lsof -i :5955
如果你想知道一個端口是否打開,你可以執行相同的 lsof 命令(如果任何進程打開它,它是打開的;否則,它不是),或者你可以嘗試連接它,例如:
nc localhost 5955
如果它立即返回而沒有輸出,則端口未打開。
值得一提的是,從技術上講,它不是開放的端口,而是主機:端口組合。 例如,如果您以 10.0.1.2 的身份插入 LAN,則可以將套接字綁定到 127.0.0.1:5955 或 10.0.1.2:5955,其中一個不會影響另一個,或者您可以綁定到 0.0.0.0 :5955 同時處理兩者。 您可以使用ifconfig
命令查看計算機的所有 IPv4 和 IPv6 地址。
一個班輪是最好的
kill -9 $(lsof -i:PORT -t) 2> /dev/null
示例:在 mac 上,想清除端口 9604。以下命令就像一個魅力
kill -9 $(lsof -i:9604 -t) 2> /dev/null
您還可以使用第一個命令來終止擁有特定端口的進程:
sudo netstat -ap | grep :<port_number>
例如,假設這個進程持有 TCP 8000端口,然后運行命令:
sudo netstat -ap | grep :8000
將輸出與持有端口8000的進程對應的行,例如:
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
在這種情況下, procHoldingPort是打開端口的進程的名稱, 4683是它的 pid, 8000 (注意它是 TCP)是它持有的端口號(您希望關閉它)。
然后按照上面的例子殺死進程:
kill 4683
正如其他人在這里提到的那樣,如果這不起作用(您可以嘗試使用 kill 和 -9 作為參數):
kill -9 4683
同樣,一般來說,如果可以的話,最好避免發送SIGKILL
(-9)。
使用命令查找進程 ID
lsof -n -i4TCP:8080
得到processId后
sudo kill -9 processID
然后提供您的系統密碼。
為此,我創建了一個函數。
function free_port() {
if [ -z $1 ]
then
echo no Port given
else
PORT=$1;
PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port
if [ -z $PID ]
then
echo port: $PORT is already free.
else
sudo kill -9 $PID # kill the process, which frees the port
echo port: $PORT is now free.
fi
fi
}
free_port 80 # you need to change this port number
在您的終端中復制並粘貼這段代碼應該可以釋放您想要的端口。 請記住在最后一行更改端口號。
如上所述,我將lsof
與kill
結合使用; 但是寫了一個快速的小 bash 腳本來自動化這個過程。
使用此腳本,您可以在任何地方簡單地鍵入killport 3000
,它將殺死在端口3000
上運行的所有進程。
這似乎對我有用。 只需將 your_port_number 更改為您要停止的端口號。
sudo lsof -t -i tcp:your_port_number | xargs kill -9
當打開端口的程序退出時,端口會自動關閉。 如果您終止運行此服務器的 Java 進程,則應該這樣做。
跆拳道。 我想關閉套接字而沒有進程終止。
今天有一種比其他命令更直接的命令(沒有 Sudo 或多行)要殺死端口 8080,只需調用:
lsof -ti tcp:8080 | xargs kill
首先找出占用了所需端口的Procees id(pid)。(例如5434)
ps輔助| grep 5434
2.殺死那個進程
kill -9 <pid>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.