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

Node.js中process.stdout.on('data',...)为何会挂起?

为什么这段Node.js代码会永久挂起?
process.stdout.on('data',function(){});

核心原因

  1. 事件循环的退出规则:Node.js进程会在事件循环中没有待处理异步任务,且没有活跃的事件监听器时自动退出。但只要存在已绑定的事件监听器(哪怕这个事件永远不会被触发),Node.js就会认为事件循环还有需要处理的潜在任务,不会终止进程。
  2. EventEmitter的特性:process.stdout继承自EventEmitter,调用on()绑定事件时,EventEmitter不会校验这个事件是否是当前对象实际会触发的——哪怕WriteStream本身根本不会发出data事件,绑定的监听器依然会被算作“活跃状态”,从而阻止进程退出。

验证与解决

如果在代码末尾添加移除监听器的逻辑,进程就能正常退出:

process.stdout.on('data',function(){});
process.stdout.removeAllListeners('data');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:12:31