node.js child_process.spawn - 进程运行但事件不会触发

时间:2013-06-17 21:01:06

标签: node.js

我在node.js中捕获子进程的事件时遇到问题。这个过程运行正常,并在完成后退出,所以一切都很好。 Stdout也正确管道,所以我可以看到输出正常。不幸的是,我的事件处理程序都没有触发,这使得我很难在进程完成时运行我的回调。我的代码如下:

var child = child_process.spawn('node',
    ['processor', reportId.toString()],
    { cwd:cwd, stdio:'pipe', env:env });

child.on('data', function(data) {
    console.log('Received data...');
    console.log(data.toString('utf8'));
});
child.on('message', function(message) {
    console.log('Received message...');
    console.log(message);
});
child.on('close', function(code) {
    console.log('Child process closed');
});
child.on('disconnect', function(code) {
    console.log('Child process disconnected');
    callback();
});
child.on('exit', function(code) {
    console.log('Child exited with code ' + code);
    callback();
});
child.stderr.pipe(process.stderr, { end:true });
child.stdout.pipe(process.stdout, { end:true });

我确定我做错了什么,但是没有任何文件似乎提供了问题可能是什么的线索。有什么想法吗?

我在Windows上运行节点0.10.8。

1 个答案:

答案 0 :(得分:5)

Spawn没有fork内置的相同ipc频道,因此消息事件不会触发,除非您启用它:

var child = child_process.spawn('node', ['processor', reportId.toString()],{
    cwd:cwd, 
    env:env,
    stdio:['ipc'] //enable ipc channel
});

数据事件应该在子项的stdout而不是子项本身:

child.stdout.on('data', function(data) {
    console.log('Received data...');
    console.log(data.toString('utf8'));
});