2013-06-17 4 views
1

У меня возникли проблемы с захватом событий для дочернего процесса в node.js. Процесс выполняется правильно и завершается, когда все сделано, так что все в порядке. Stdout также правильно работает, поэтому я вижу, что выходной сигнал прекрасен. К сожалению, ни один из моих обработчиков событий не срабатывает, что затрудняет выполнение моего обратного вызова при выполнении этого процесса. Мой код ниже:node.js child_process.spawn - выполняется процесс, но события не срабатывают

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 }); 

Я уверен, что я делаю что-то неправильно, но ни один из документов не кажется, предлагает ключ к пониманию того, что проблема может быть. Есть идеи?

Я запускаю узел 0.10.8 на Windows.

ответ

4

Spawn не имеет один и тот же канал, построенный Ipc в этом fork делает это событие сообщение не будет срабатывать, если не включить его:

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')); 
}); 
+0

Спасибо за помощь. Похоже, что также полезно проверить свое предположение о том, что дочерний процесс фактически завершается! В моем случае что-то мешало ему закрыться, что означало, что ни одно из ожидаемых событий не стреляло. –

+0

fork может лучше вписаться в вашу ситуацию, так как вам нужна связь между родительскими и дочерними процессами. Вот модуль, который я написал, который упростил его: https://npmjs.org/package/farmhand –

Смежные вопросы