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

Nat*_*ley 1 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 });
Run Code Online (Sandbox Code Playgroud)

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

我在Windows上运行节点0.10.8.

mr.*_*eze 5

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

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

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

child.stdout.on('data', function(data) {
    console.log('Received data...');
    console.log(data.toString('utf8'));
});
Run Code Online (Sandbox Code Playgroud)