如何找出其中的Node.js PID是在哪个端口上运行(How to find out which

2019-07-03 10:45发布

我想重新开始,我有我的服务器上运行多个Node.js的过程之一。 如果我运行ps ax | grep node ps ax | grep node我得到我的所有节点proccesses的列表,但它并没有告诉我,他们是在哪个端口。 如何杀死3000端口(例如)的一个运行。 什么是管理多个节点处理的好办法?

Answer 1:

如果你运行:

$ netstat -anp 2> /dev/null | grep :3000

你应该看到类似这样的:

tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      5902/node

在这种情况下, 5902是PID。 您可以使用这样的杀吧:

netstat -anp 2> /dev/null | grep :3000 | awk '{ print $7 }' | cut -d'/' -f1 | xargs kill

下面是使用其他版本egrep可能会好一点,因为它的字符串“节点”专门搜索:

netstat -anp 2> /dev/null | grep :3000 | egrep -o "[0-9]+/node" | cut -d'/' -f1 | xargs kill

你可以把上面到一个脚本或将按照你~/.bashrc

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

现在你可以运行:

$ smackdown 3000


Answer 2:

一个一衬垫是

lsof -n -i:5000 | grep LISTEN | awk '{ print $2 }' | uniq | xargs -r kill -9 

你只需要sudo的,如果你杀死一个过程用户没有启动。 如果您的用户启动的节点过程中,你也许可以杀死它W / O须藤。

祝好运!



Answer 3:

这为我节省了大量的时间:

pkill node



Answer 4:

为什么不是一个简单的fuser基础的解决方案?

如果你不关心使用3000端口的进程是否为节点,它可能是那样简单

fuser -k -n tcp 3000

如果你wan't,以确保你不杀其他进程,你会喜欢的东西去

PID="$(fuser -n tcp 3000 2>/dev/null)" \
  test "node"="$(ps -p $PID -o comm=)" && kill $PID


文章来源: How to find out which Node.js pid is running on which port