You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何捕获并忽略SIGINT信号?捕获失效如何排查?

我找到了一篇相关主题的帖子《How to perform an async operation on exit》,但它可能不适用于macOS系统,或者在Node.js v14版本中已经不生效了。

我最初的问题更复杂:我无法在SIGINT的回调(或异步回调)中让setTimeout或await正常运行。后来我意识到,我首先需要实现的是捕获并忽略SIGINT信号。

如果能做到这一点,我就可以在需要的时候响应SIGINT执行关闭逻辑。

所以我回到基础测试,尝试直接禁用SIGINT,但没有成功。

我可以检测到SIGINT,也可以用控制台日志或其他同步代码做出响应,但无论我怎么操作,程序都会很快关闭。

process.on('SIGINT', () => { console.log('here'); return false; });
process.on('SIGINT', () => { console.log('here'); return true; });
process.on('SIGINT', () => { console.log('here'); return undefined; });
process.on('SIGINT', () => { console.log('here'); return new Promise(resolve => { console.log(resolve); }); });

按下Ctrl+C或者向进程发送SIGINT信号后,以上所有方法都无法阻止我的Node.js服务关闭。

更新

当我直接用node app.js启动服务时,SIGINT拦截功能完全正常!

显然之前的异常是我通过nodemon间接启动服务导致的:IDE终端按下Ctrl+C或者点击IDE的红色🟥停止按钮发送的中断信号实际上被发送给了nodemon,所以无法被业务进程捕获。在IDE环境外、不使用nodemon启动时,优雅关闭功能就可以正常运行。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 21:54:03