Node.js 进程、子进程与 Cluster 实战教程

本系列面向刚开始学习 Node.js 后端的开发者,以 Node.js 22+、TypeScript、CommonJS 和 ts-node 为基础,重点解决日常工程问题:运行 Bash/Python/R、读取标准输出、判断进程是否成功、取消超时任务、使用 Cluster 扩展 Express,以及在 PM2 中正确部署。

学习路线

  1. 学习路线与贯穿项目
  2. 操作系统进程与 Node.js 进程
  3. process 属性与运行环境
  4. argvenvcwd 与退出码
  5. stdin、stdout、stderr 与 stdio
  6. Bash 管道、重定向与退出状态
  7. Process 事件、Signal 与优雅退出
  8. child_process 工作原理
  9. spawn() 实战
  10. exec()execFile()fork()
  11. 子进程 stdio 配置
  12. 启动、错误、结束与成功
  13. 超时、Abort 与子进程清理
  14. 运行 Bash、Python、R 与第三方工具
  15. IPC 与进程间通信
  16. Worker、child_process、Cluster 与 Worker Threads
  17. Cluster 工作原理
  18. Cluster + Express 实战
  19. 重复监听、定时任务与资源所有权
  20. 命令执行安全与隔离
  21. PM2、Nginx、Cluster 与部署
  22. 可观测性、测试与排错
  23. 最终综合项目
  24. API Cheatsheet

贯穿场景

前端创建分析任务
  → Express 校验并持久化
  → 后台 Worker 领取任务
  → spawn() 启动 Python/R/Bash
  → stdout 输出机器结果/进度
  → stderr 输出诊断
  → close 事件确认 stdio 已关闭
  → 根据退出码和结果协议更新任务
  → Cluster/PM2 管理多个服务进程

使用约定

必须记住

stderr 有内容不等于失败
exit 发生不等于 stdio 已全部关闭
kill() 返回 true 不等于进程已经退出
Worker 是角色名称,不是一种固定 API
Cluster Worker 是独立 Node.js 进程,不共享全局变量
每个 Cluster Worker 都会执行入口文件,外部副作用可能重复
PM2 多实例与代码 Cluster 通常只选择一层扩容