如何closuresMac上terminal的开放端口?

我从java类中打开了端口#5955以便从客户端进行通信。 我完成后如何closures这个端口? 还有哪个命令可以显示我是否打开或closures端口?

  1. 找出占用您想要释放的端口号(例如5955)的进程ID(PID)

    sudo lsof -i :5955 
  2. 杀死当前正在使用该端口的进程使用其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上运行的所有进程。

https://github.com/xtrasimplicity/killport

当打开该端口的程序退出时,该端口将自动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)。

干杯,

盖伊。

  1. 首先找出已经占用了所需端口的程序id(pid)(例如5434)

    ps aux | grep 5434

2.处理这个过程

  kill -9 <pid>