我在Windows上使用Ubuntu框、Node和VS代码。
当CTRL-C没有正确停止进程,或者机器/VCode进入睡眠状态时,通常需要手动终止进程。
一个不错的解决方案是使用killall node
。
但是,这也会关闭VSCode窗口并强制重新启动。
如何在不手动检查每个进程并找到正确的端口/PID的情况下杀死所有节点进程(减去为VSCode供电的节点进程(??
例如:
$netstat -lntp | grep node
tcp 0 0 127.0.0.1:545467 0.0.0.0:* LISTEN 543457/node
tcp6 0 0 :::1234 :::* LISTEN 345654/node
tcp
连接需要维护,因为它可以保持VS CVode的运行,但我想终止tcp6
连接(以及任何其他连接(。
我知道可以找到端口、进程等,然后手动终止进程,但每次VSCode变为非活动时都要这样做,这很令人沮丧。
我如何运行一个命令(可能通过NPM脚本(来杀死除运行VSCode的节点进程之外的所有节点进程?
由于killall node
也可以终止到主机的VSCode进程
为了杀死不是由VSCode生成的Node进程,可以使用ps命令并将其管道传输到grep-v
(--inverse-match(以筛选出与".vscode-server"
字符串匹配的进程,并使用awk仅提取PID:
killNode.sh
#!/bin/bash
NodePIDs=$(ps aux | grep [n]ode | grep -v ".vscode-server" | awk '{print $2}' | sort | uniq)
for PID in $NodePIDs; do
echo "Killing NodeJS process with PID: $PID"
kill $PID
done
# App's NodeJS processes are now killed.
# VSCode should still be connected to this host machine
另一种杀死绑定到特定端口的节点进程的方法是,您可以使用lsof,例如:
killNodePort.sh
#!/bin/bash
PORT=8000
# PS, instead of hardcoding the port pass it as an environment variable
# `PORT=8000 bash killNodePort.sh` or source it from .env file like:
# source .env or: source /abs/path/to-your/.env
NodePIDs=$(lsof -i tcp:"$PORT" | grep [n]ode | awk '{print $2}' | sort | uniq)
for PID in $NodePIDs; do
echo "Killing NodeJS process PORT: $PORT with PID: $PID"
kill $PID
done
# App's NodeJS processes on PORT $PORT are now killed.
# Remote VSCode should still be connected to your host machine
带着好奇的心情阅读以上内容,并始终浏览您使用的命令的手册(man <commandName>
(。即,如果您有一个特定的案例运行,即:ps --help all
或lsof --help
,并调整以上建议以适应。