一.问题原因
在使用Idea开发Java项目时常常选中Jetty作为我们本地运行项目的Web容器。当我们执行了jetty run后,若Idea被非正常地关闭了,可能出现Idea关闭了但Jetty仍在运行的情况。这时候如果我们重新打开Idea,再次执行jetty run时就会报错:
Failure: Address already in use
二.解决方法
以下为在Windows系统下的解决方法。只需要执行两个命令即可。
命令一:找到占用端口的进程
假如我是在80端口启动了jetty,那么打开windwos“命令提示符”窗口,输入以下命令:
netstat -ano | findstr "127.0.0.1:80"
解释一下,netstat -ano是列出系统当前所有端口的占用情况。但这个列表往往较长,我们想要找到自己要的并不容易。所以才有了命令的后边部分——findstr "80"。findstr命令搜索符合条件的结果,为我们过滤掉大部分的内容,这样就容易找到我们需要的80端口占用情况。
netstat和findstr命令之间有个“|”,这个竖杠表示将netstat命令的结果作为findstr命令的输入。这种写法在Linux系统中也比较常见。
执行此命令的输出结果示例如下:
我们看到输出结果一共有5列,分别是:协议、本地地址、外部地址、状态、PID。其中本地地址为“127.0.0.1:80”的为我们要找的,其对应的PID是10468。
命令二:使用taskkill杀死占用端口的进程
使用命令一我们拿到了占用端口的进程的PID,10468。再执行以下命令杀死进程即可。
taskkill /PID 10468 /F
其中PID用于指定进程ID,F选项意思是强制结束进程
三.扩展
拿到进程的PID后,如果想进一步了解其对应的程序名称,可以使用以下命令:如PID是4832
tasklist | findstr 4832
其输出结果为: