You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

macOS Big Sur关闭终端窗口时Nodemon无法终止Node.js进程

解决macOS Big Sur下nodemon启动的Node进程关闭终端后残留的问题

我之前在macOS Big Sur 11.0.1上也碰到过一模一样的问题!折腾了好一阵才找到几个可行的解决办法,分享给你:

方案1:给nodemon添加--exitcrash参数(最推荐)

这个参数是nodemon官方后来针对这类孤儿进程问题推出的,它会强制nodemon在父进程终止时跟着退出子进程。你有两种设置方式:

  • 直接修改项目的package.json里的npm脚本:
    "scripts": {
      "dev": "nodemon --exitcrash dist/index.js"
    }
    
  • 或者在项目根目录创建nodemon.json配置文件,统一配置:
    {
      "exitcrash": true
    }
    

设置完之后,再关闭终端窗口选择“Terminate”,node进程就会被彻底杀掉了。

方案2:给ZSH添加终端关闭钩子

如果你不想改动nodemon的配置,可以给ZSH加一个退出钩子,让终端关闭时自动清理所有子进程。打开你的~/.zshrc文件,添加下面这行代码:

trap 'pkill -TERM -P $$' EXIT

保存后执行source ~/.zshrc让配置生效。这样每次关闭终端窗口时,系统会自动杀掉所有该终端启动的子进程,包括nodemon和它拉起的node服务。

方案3:降级nodemon版本(临时应急)

这个问题其实是特定版本的nodemon和Big Sur的进程管理机制不兼容导致的,我当时临时降级到nodemon@2.0.7就解决了问题,你可以试试:

npm uninstall nodemon
npm install nodemon@2.0.7 --save-dev

另外补充一点:你提到的Ctrl+C能正常终止、文件更新会自动终止进程,是因为这两种场景下nodemon能正常捕获到终止信号,但终端窗口关闭时的信号传递在Big Sur下有了变化,nodemon默认的处理逻辑没跟上,上面的方案1就是官方针对这个问题给出的修复方案,优先推荐使用。

内容的提问来源于stack exchange,提问作者wmcb91

火山引擎 最新活动