我想重新开始,我有我的服务器上运行多个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