如何在停止当前运行的Bash脚本后执行命令终止Node进程?
解决IntelliJ IDEA停止Bash脚本后Node进程残留的问题(Windows+Cygwin环境)
我在Windows系统上使用Cygwin环境开发Angular应用,一开始写了个简单的Bash脚本用来启动项目:
#!/usr/bin/env bash yarn start
我把这个脚本配置到IntelliJ IDEA的「Run/Debug Configurations」里作为运行目标,但遇到了个麻烦:当我在IDEA里停止脚本运行时,脚本本身确实终止了,但背后的Node进程却没被一起杀掉,导致对应的端口一直被占用,每次重启都得手动处理残留进程。
后来我修改了脚本,在启动前先清理掉之前残留的Node进程,临时解决了这个问题:
#!/usr/bin/env bash echo "cleaning from previous run...." ps -W | awk '/node.exe/,NF=1' | xargs kill -f echo "done cleaning" yarn start
脚本作用说明
ps -W:在Cygwin环境下,这个命令能列出Windows系统的所有进程awk '/node.exe/,NF=1':筛选出包含node.exe的进程行,只保留进程ID(PID)部分xargs kill -f:把筛选出的PID传递给kill命令,强制终止这些残留的Node进程
这样每次启动Angular应用前,都会自动清理掉之前的残留进程,不用再担心端口被占用的问题。
内容的提问来源于stack exchange,提问作者Muhammad Hewedy




