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

Node.js中如何判断worker thread(工作线程)是否处于存活状态

Node.js判断工作线程(Worker Thread)是否存活的通用方法

内置方案(无需额外依赖)

Node.js的worker_threads模块自带原生属性和事件可以直接判断线程状态,无需引入第三方库:

  • 状态属性直接查询:Worker实例的exitedAfterDisconnect是布尔值属性,值为false时说明线程处于存活状态,值为true时说明线程已经终止(含正常退出、崩溃等所有终止场景)
  • 事件监听实时感知:如果需要第一时间拿到线程崩溃/退出的通知,可以直接监听Worker实例的两个原生事件:
    • error:线程运行过程中发生未捕获异常导致崩溃时触发
    • exit:线程无论正常终止还是异常崩溃都会触发,传入的参数为退出码,正常退出时退出码为0,异常终止时退出码非0

示例代码:

const { Worker } = require('worker_threads');
// 初始化工作线程
const taskWorker = new Worker('./task-script.js');

// 监听线程崩溃
taskWorker.on('error', (err) => {
  console.error('工作线程发生崩溃,错误详情:', err);
});

// 监听线程退出
taskWorker.on('exit', (code) => {
  if (code !== 0) {
    console.error('工作线程异常终止,退出码:', code);
  }
  console.log('工作线程已结束运行');
});

主动轮询判断封装

如果需要随时主动查询线程存活状态,可以直接封装一个通用判断函数:

/**
 * 判断工作线程是否存活
 * @param {Worker} worker 工作线程实例
 * @returns {boolean} 存活返回true,终止/崩溃返回false
 */
function isWorkerAlive(worker) {
  if (!worker) return false;
  return !worker.exitedAfterDisconnect;
}

// 调用示例
console.log(isWorkerAlive(taskWorker));

注意事项

  • exitedAfterDisconnect属性在Node.js v12.17.0、v14.0.0及以上版本为稳定特性,低于该版本的环境优先使用error和exit事件监听方案
  • 线程崩溃时会先触发error事件,之后再触发exit事件,无需重复处理状态
  • 如果工作线程主动调用process.exit()退出,也会触发exit事件,退出码为0属于正常退出场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:09:03