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

Node.js v18中process.on('signal')无法捕获SIGINT(CTRL-C)的问题

Node.js捕获CTRL-C(SIGINT)信号失败的解决方法

你的代码核心问题是监听的事件名称错误:Node.js中捕获信号的正确方式是监听具体的信号名称(如SIGINT),而非通用的signal事件。

修正后的代码

process.on('SIGINT', async () => {
    console.log('Received SIGINT. Calling save function...');
    try {
        await amazon.saveData();
        console.log('Data saved successfully');
        process.exit(0);
    } catch (err) {
        console.error('Failed to save data:', err);
        process.exit(1);
    }
});

关键注意事项

  • 不要在await后直接无条件调用process.exit(0):异步操作saveData需要时间执行,提前exit会导致数据保存未完成就终止进程。
  • 加入try/catch捕获保存过程中的错误:避免无提示退出,同时通过退出码区分执行结果(0为成功,1为错误)。
  • 如需监听多个信号(如SIGTERM),可以复用同一个处理函数:
async function handleSignal(signal) {
    console.log(`Received ${signal}. Saving data...`);
    try {
        await amazon.saveData();
        console.log('Data saved');
        process.exit(0);
    } catch (err) {
        console.error('Save failed:', err);
        process.exit(1);
    }
}

process.on('SIGINT', handleSignal);
process.on('SIGTERM', handleSignal);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:08