NodeJS过早退出

我有一个NodeJSsubprocess使用process.on('message', callback)监听消息,但是这个进程正在退出。 从我的阅读这不应该发生,因为我有一个callback等待事件循环,那么为什么NodeJS退出?

下面的示例代码应该能够作为独立的NodeJS进程运行,不会退出,正确?

节点版本:7.3.0

示例代码:

 function handle(msg) { //do work here } process.on('message', (msg) => { handle(msg); } 

这是一个模拟你的问题的示例程序。

master.js

 const cp = require('child_process'); const child = cp.spawn('node', ['./child.js'], {stdio: ['ipc']}) child.stdout.on('data', data => console.log(data.toString())) child.send('immediate execute MESSAGE 1') setTimeout(() => { child.send('late execute MESSAGE 2 after 4 seconds') }, 4000) 

child.js

 function handle(msg) { console.log('Handling message -> ', msg); } process.on('message', (msg) => { handle(msg); }); process.on('exit', () => { process.disconnect(); }); 

这里要注意的关键是 –

  1. child_process.spawn – spawn返回一个Buffer,并且一旦subprocess启动就可以开始监听stdoutstream。
  2. {stdio: ['ipc']} – 这个选项可以让你用生成的subprocess打开一个IPC通道。 当你想断开孩子,只需使用child.disconnect()