NodeJS过早退出

时间:2017-02-27 03:09:41

标签: javascript node.js

我有一个NodeJS子进程正在侦听process.on('message', callback)的消息,但是进程正在立即退出。根据我的阅读,这不应该发生,因为我有一个等待事件循环的回调,为什么NodeJS退出?

下面的示例代码应该能够作为独立的NodeJS进程运行而不是退出,对吗?

节点版本:7.3.0

示例代码:

function handle(msg) {
    //do work here
}

process.on('message', (msg) => {
    handle(msg);
}

1 个答案:

答案 0 :(得分:1)

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

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,你可以在子进程启动后立即开始监听stdout流。
  2. {stdio: ['ipc']} - 此选项允许您使用生成的子进程打开IPC通道。如果要断开孩子的连接,只需使用child.disconnect()即可。