使用关闭进程的方式解决端口冲突

标签: node端口冲突 EADDRINUSE 端口冲突 关闭进程 查看端口进程
10人阅读 评论(0) 收藏 举报
分类:

当我们启动服务时可能出现端口号被占用的情况,此时可以用过通过想要使用的端口号查看此端口号上运行的进程,拿到这个进程Id,从而关闭进程使得待运行的服务正常运行。以nodejs为例:

打印了下完整的端口占用的错误对象信息:

{ Error: listen EADDRINUSE :::7001
    at Object._errnoException (util.js:1022:11)
    at _exceptionWithHostPort (util.js:1044:20)
    at Server.setupListenHandle [as _listen2] (net.js:1351:14)
    at listenInCluster (net.js:1392:12)
    at Server.listen (net.js:1476:7)
    at Object.<anonymous> (/Users/stevenlee/github/bebetter/eggjs-note-steven/demo/001-mini/index.js:22:8)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
  code: 'EADDRINUSE',
  errno: 'EADDRINUSE',
  syscall: 'listen',
  address: '::',
  port: 7001 }

也就是常见的EADDRINUSE报错。

一、查看某个端口运行的进程

查看端口运行的进程一般有两种方式,netstatlsof命令。(端口号以7001为例)

1.使用netstat命令

//输出某个端口当前运行的进程信息
$ netstat -an | grep 7001
// tcp46    0      0  *.7001          *.*               LISTEN 

//输出某个端口当前运行的进程信息及进程Id等信息
$ netstat -anv | grep 7001
//tcp46     0      0  *.7001          *.*               LISTEN      131072 131072  16000      0
  • 以上命令输出了一条结果,代表7001端口此时只有一个进程
  • 输出结果的倒数第二个参数(16000)对应的就是该进程的进程Id

2.使用lsof命令

注:lsof命令属于Linux命令,在mac系统或linux系统可直接使用,暂不适用于windows系统。

$ lsof -i:7001
//输出结果:
// COMMAND   PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
// node    16000 stevenlee   13u  IPv6 0x308d6494ec0fe381      0t0  TCP *:afs3-callback (LISTEN)

对应输出描述如下:

输出名 描述
COMMAND 进程的名称
PID 进程标识符(进程Id)
USER 进程所有者
FD 文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE 文件类型,如DIR、REG等
DEVICE 指定磁盘的名称
SIZE 文件的大小
NODE 索引节点(文件在磁盘上的标识)
NAME 打开文件的确切名称

根据终端输出我们可以愉快地拿到进程Id:16000

3.使用nodejs内置process模块

Nodejs中,process对象是一个全局变量,因此无需require。它提供当前Node进程的相关信息。使用process.pid可以拿到当前进程的PID。

console.log(`This process is pid ${process.pid}`);
//16000

二.关闭进程

直接使用kill -9命令强制终止进程。

语法:kill -9 <进程Id>

$ kill -9 16000

输入之后回车,没有任何反馈,表明你的操作成功了(没有消息就是好消息)。

end

查看评论

服务器端口冲突必杀技

小伙伴们在本机启动tomcat或者其它服务器时,是不是经常遇到无法启动提示端口已经被占用的情况?非常恼火,你又不知道是哪个程序占用了这个端口,怎么办?下面教大家一个必杀技,针对任何端口冲突问题,专门解...
  • walkingmanc
  • walkingmanc
  • 2017-01-08 20:41:23
  • 1141

解决端口冲突问题

做Web程序的朋友可能经常会遇到端口号冲突的问题,如IIS,tomcat的端口号冲突等。现在提供一个解决方案,希望能用得上 .1.  进入cmd2. 查看哪些进程在使用80端口    netstat ...
  • Maojm
  • Maojm
  • 2008-05-10 12:55:00
  • 484

Tomcat 启动端口冲突异常

项目发布时,控制台输入了下面的异常、 严重: StandardServer.await: create[8005]:  java.net.BindException: Address al...
  • u011598529
  • u011598529
  • 2015-09-06 15:30:34
  • 811

解决apache端口冲突的问题

1、如果安装wampserver后无法启动服务,可能存在web端口和其它服务如IIS发生冲突导致80端口被占用的现象。 解决方法:打开apache查看httpd.conf文件查看监听端口号,如果不喜...
  • bbbkaye
  • bbbkaye
  • 2017-04-11 13:59:49
  • 958

c#CEXCEL关闭(解决无法关闭进程的问题)

  • 2010年03月06日 22:41
  • 4KB
  • 下载

Oracle和Tomcat端口冲突

  • 2009年01月09日 11:36
  • 47KB
  • 下载

windows解决端口号冲突

解决端口冲突,无非就是找到端口所冲突的端口号,进而找到占用此端口号的进程,杀死进程就可以了。命令一:查看端口号(以1085端口为例)netstat -ano 命令二:查找占用端口号的进程netstat...
  • qq_36251958
  • qq_36251958
  • 2018-02-22 11:46:28
  • 50

如何检测和解决端口冲突问题?

1.netstat -na  查看当前正在使用的TCP端口 netstat -help 查看帮助 2. 通过一个配置参数来指定TCP服务程序所使用的端口号 if(args.lengt...
  • dreamsnow127
  • dreamsnow127
  • 2012-03-17 20:52:13
  • 3232

Windows下启动ActiveMq端口被占用的解决办法

cd /D E:\RuntimeSoft\apache-activemq-5.11.0\binactivemq.bat start结果提示:端口号被占用。Windows下查看端口号被占用开始--运行-...
  • FansUnion
  • FansUnion
  • 2015-02-11 13:58:51
  • 1834

cmd解决端口冲突

pid为7592进程占用80端口: 通过7592找到应用名(可以忽略) 执行taskkill 命令强杀进程!!...
  • u012088516
  • u012088516
  • 2016-12-13 16:20:31
  • 185
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 1240
    排名: 4万+
    最新评论