我想重新启动我在服务器上运行的许多 Node.js 进程之一。如果我运行,ps ax | grep node
我会得到所有节点进程的列表,但它不会告诉我它们在哪个端口上。如何杀死在端口 3000 上运行的那个(例如)。管理多个 Node 进程的好方法是什么?
问问题
40997 次
4 回答
24
如果你运行:
$ 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
于 2012-10-29T21:35:17.930 回答
12
这为我节省了很多时间:
pkill node
于 2017-05-30T08:59:04.393 回答
6
单线是
lsof -n -i:5000 | grep LISTEN | awk '{ print $2 }' | uniq | xargs -r kill -9
如果您要终止用户未启动的进程,则仅需要 sudo。如果您的用户启动了节点进程,您可能可以在不使用 sudo 的情况下将其终止。
祝你好运!
于 2013-09-13T15:36:36.240 回答
0
为什么不是基于简单fuser
的解决方案?
如果你不关心使用端口 3000 的进程是否是节点,它可以很简单
fuser -k -n tcp 3000
如果你不能确定你不会杀死其他进程,你可以使用类似的东西
PID="$(fuser -n tcp 3000 2>/dev/null)" \
test "node"="$(ps -p $PID -o comm=)" && kill $PID
于 2014-01-07T10:43:46.200 回答