如何closuresMac上terminal的开放端口?
我从java类中打开了端口#5955以便从客户端进行通信。 我完成后如何closures这个端口? 还有哪个命令可以显示我是否打开或closures端口?
-
找出占用您想要释放的端口号(例如5955)的进程ID(PID)
sudo lsof -i :5955
-
杀死当前正在使用该端口的进程使用其PID
sudo kill -9 PID
列出端口上打开的文件并复制PID
lsof -i :<port>
用火杀死它 :)
kill -9 <PID>
但是,您打开该端口,您以同样的方式closures它。 例如,如果您创build了套接字,将其绑定到端口0.0.0.0:5955,并调用listen,请closures该套接字。
您也可以杀死端口打开的进程。
如果你想知道什么进程打开了一个端口,试试这个:
lsof -i :5955
如果你想知道一个端口是否打开,你可以执行相同的lsof命令(如果有任何进程打开,它是打开的,否则不是),或者你可以尝试连接它,例如:
nc localhost 5955
如果它立即返回而没有输出,则端口未打开。
值得一提的是,从技术上来说,这不是一个开放的端口,而是一个主机:端口组合。 例如,如果您以10.0.1.2的forms插入局域网,则可以将套接字绑定到127.0.0.1:5955或10.0.1.2:5955,而不会影响另一个,也可以绑定到0.0.0.0 :5955同时处理。 您可以使用ifconfig
命令查看计算机的所有IPv4和IPv6地址。
要find该过程,请尝试:
sudo lsof -i :portNumber
杀死当前正在使用该端口的进程使用其PID
kill PID
然后检查端口是否closures。 如果不是,请尝试:
kill -9 PID
如果以前没有工作,我只会做以下事情
sudo kill -9 PID
只是为了安全。 再次取决于你如何打开端口,这可能无关紧要。
如上所述,我使用lsof
加上kill
。 但写了一个快速的小bash脚本来自动化这个过程。
使用这个脚本,你可以简单地从任何地方inputkillport 3000
,并且它将killport 3000
在端口3000
上运行的所有进程。
当打开该端口的程序退出时,该端口将自动closures。 如果你杀死运行这个服务器的Java进程,应该这样做。
你也可以使用这第一个命令来杀死拥有特定端口的进程:
sudo netstat -ap | grep :<port_number>
例如,说这个过程持有端口8000 TCP,然后运行命令:
sudo netstat -ap | grep :8000
将输出与过程保持端口8000对应的行,例如:
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
在这种情况下, procHoldingPort是打开端口的进程的名称, 4683是它的pid,而8000 (注意它是TCP)是它保存的端口号(您希望closures它)。
然后按照上面的例子杀死进程:
kill 4683
正如其他人在这里提到的,如果这不起作用(你可以尝试使用-9作为参数杀死):
kill -9 4683
再说一次,如果可以的话,最好避免发送SIGKILL(-9)。
干杯,
盖伊。
-
首先找出已经占用了所需端口的程序id(pid)(例如5434)
ps aux | grep 5434
2.处理这个过程
kill -9 <pid>