2

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

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。

4

1 回答 1

5

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

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

数据事件应该在孩子的标准输出上,而不是孩子本身:

child.stdout.on('data', function(data) {
    console.log('Received data...');
    console.log(data.toString('utf8'));
});
于 2013-06-18T03:17:39.980 回答