如何杀死除在Windows上运行VS代码的节点进程外的所有节点进程



我在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 alllsof --help,并调整以上建议以适应。

相关内容

  • 没有找到相关文章

最新更新