如何找出哪个Node.js pid在哪个端口上运行

Par*_*ner 10 port pid kill node.js

我想重新启动我在服务器上运行的许多Node.js进程之一.如果我运行,ps ax | grep node我会获得所有Node proccesses的列表,但它并没有告诉我他们在哪个端口.如何杀死在端口3000上运行的那个(例如).管理多个Node进程的好方法是什么?

Dav*_*don 17

如果您运行:

$ netstat -anp 2> /dev/null | grep :3000
Run Code Online (Sandbox Code Playgroud)

你应该看到类似的东西:

tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      5902/node
Run Code Online (Sandbox Code Playgroud)

在这种情况下,5902是pid.你可以使用这样的东西来杀死它:

netstat -anp 2> /dev/null | grep :3000 | awk '{ print $7 }' | cut -d'/' -f1 | xargs kill
Run Code Online (Sandbox Code Playgroud)

这是一个替代版本使用egrep它可能会更好一点,因为它专门搜索字符串'node':

netstat -anp 2> /dev/null | grep :3000 | egrep -o "[0-9]+/node" | cut -d'/' -f1 | xargs kill
Run Code Online (Sandbox Code Playgroud)

您可以将上述内容转换为脚本或将以下内容放入~/.bashrc:

function smackdown () {
  netstat -anp 2> /dev/null |
  grep :$@ |
  egrep -o "[0-9]+/node" |
  cut -d'/' -f1 |
  xargs kill;
}
Run Code Online (Sandbox Code Playgroud)

现在你可以运行:

$ smackdown 3000
Run Code Online (Sandbox Code Playgroud)


小智 11

这为我节省了很多时间:

pkill node


Mic*_*ole 5

一线是

lsof -n -i:5000 | grep LISTEN | awk '{ print $2 }' | uniq | xargs -r kill -9 
Run Code Online (Sandbox Code Playgroud)

如果要终止用户未启动的进程,则仅需要sudo。如果您的用户启动了节点进程,则可以不使用sudo杀死它。

祝好运!