如何解决端口 XXXX 已被占用?

举报
搞前端的半夏 发表于 2022/06/30 21:52:31 2022/06/30
【摘要】 很多人在开发应用程序时,会经常遇到Port XXXX already in use. 系统已经在后台运行了使用具体端口的应用程序。如果重新运行您的应用程序,会收到类似 Port XXXX already in use.在这种情况下,通过下面两步可以快速的解决问题查找正在运行的端口进程标识号(PID)杀死进程标识号(PID)上述路径将轻松解决端口被占用问题。下面我会尝试展示如何在 UNIX 上...

很多人在开发应用程序时,会经常遇到Port XXXX already in use. 系统已经在后台运行了使用具体端口的应用程序。如果重新运行您的应用程序,会收到类似 Port XXXX already in use.

在这种情况下,通过下面两步可以快速的解决问题

  • 查找正在运行的端口进程标识号(PID)
  • 杀死进程标识号(PID)

上述路径将轻松解决端口被占用问题。

下面我会尝试展示如何在 UNIX 上找到进程标识号 (PID) 以及如何将它们全部杀死。当然了解决的办法肯定不止一种。本文我主要使用lsofkill命令来解决端口被占用问题。

lsof是文件列表。该命令允许您获取已打开文件的列表。基本上,它为您提供有关哪个进程打开了哪些文件的信息。

man lsof您可以在终端上使用命令找到更多信息。

NAME
       lsof - list open files

SYNOPSIS
       lsof [ -?abChlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ] [ +|-e s ] [ +|-E ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g
       [s] ] [ -i [i] ] [ -k k ] [ -K k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t[m<fmt>]] ] [ -s [p:s] ] [ -S
       [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ +|-X ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]

DESCRIPTION
       Lsof revision 4.91 lists on its standard output file information about files opened by processes for the following UNIX
       dialects:

            Apple Darwin 9 and Mac OS X 10.[567]
            FreeBSD 8.[234], 9.0 and 1[012].0 for AMD64-based systems
            Linux 2.1.72 and above for x86-based systems
            Solaris 9, 10 and 11

       (See the DISTRIBUTION section of this manual page for information on how to obtain the latest lsof revision.)

       An open file may be a regular file, a directory, a block special file, a character special file, an executing text reference, a
       library, a stream or a network file (Internet socket, NFS file or UNIX domain socket.)  A specific file or all the files in a
       file system may be selected by path.

       Instead of a formatted display, lsof will produce output that can be parsed by other programs.  See the -F, option description,
       and the OUTPUT FOR OTHER PROGRAMS section for more information.

       In addition to producing a single output list, lsof will run in repeat mode.  In repeat mode it will produce output, delay, then
       repeat the output operation until stopped with an interrupt or quit signal.  See the +|-r [t[m<fmt>]] option description for
       more information.

在 UNIX 中使用命令查找端口信息lsof很容易。

我将使用 8080 端口作为示例。我已经在 8080 端口中运行了 Spring Boot 应用程序,我将通过以下步骤在终端中终止该进程。

lsof -i:8080命令将向您显示有关所需端口的全部信息。

lsof -t -i:8080命令将只为您提供此端口中的 PID 号。

  • -t - 仅显示进程 ID
  • -i - 仅显示互联网连接
  • :8080 - 仅显示给定端口的进程。
$ lsof -i:8080
COMMAND   PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    60586 erkanguzeler   86u  IPv6 0x20f3b74184a9fc11      0t0  TCP *:http-alt (LISTEN)

$ lsof -t -i:8080
60586

找到端口后,最后一部分对我们来说很容易。我们只需要杀死端口PID号就可以了kill

sudo kill -9 <PID>
  • kill: 杀死进程命令
  • -9: 强杀
# erkanguzeler
$ sudo kill -9 60586
# erkanguzeler
$ lsof -i:8080
// nothing to show

如果你想用一行命令为你的端口杀死 PID 进程。也可以在终端中使用以下命令。

sudo kill -9 $(sudo lsof -t -i:<PORT>)

结论

通过使用本文的方法来来终止系统中已在使用端口的应用程序。我相信有其他很多简单的方法可以解决这类问题。这是我解决它的方法之一。我希望这对您的开发应用程序时有所帮助。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。