2013-07-22 4 views
1

Я вызова отстраненно child_process (в окнах), как этотNode.js Частный дочерний процесс вызывается как интерактивный процесс переднего плана

var stdout = fs.openSync('./out.log', 'a'); 
var stderr = fs.openSync('./out.log', 'a'); 

var child = child_process.spawn('node', ['./main.js'], { 
    detached: true, 
    stdio: [ 'ignore', stdout, stderr ], 
    env: process.env 
}); 

child.unref(); 

The порожденного процесса, т.е. main.js в свою очередь вилок некоторые работники с помощью child_process.fork.

Обычно детские и дочерние процессы должны выполняться в фоновом режиме, исправлять меня, если я ошибаюсь. Но когда я пытаюсь, процессы дочерних дочерних элементов работают как интерактивно на переднем плане. Я не знаю, что заставляет их вести себя так. Может ли кто-нибудь указать, что может быть проблемой?

Если я установил detached в false, он отлично работает, но исходный родитель не может выйти без выхода всех детей.

ответ

2

Я думаю, что это может быть проблемой с узлом на окнах.

Я попробовал как ваш код, так и образец кода в документации на узел, на которой вы точно ссылаетесь на http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options на моей виртуальной машине Ubuntu, и все работает отлично. Процесс отсоединяется и продолжает работать, и нет выхода нигде, кроме out.log, потому что он успешно работает в фоновом режиме.

Я выполнил как простую команду ping, так и выполнил экземпляр узла в файле javascript, как вы пытаетесь сделать, и оба работали нормально.

Я бы порекомендовал вам сделать то же самое с командой ping в окнах. , ,

var child = child_process.spawn('ping', ['-n','25','localhost'],. . . 

Если это работает так, как вы ожидаете, может быть что-то внутри вашего main.js, что вызывает проблему. Если это не сработает, я бы сказал, что вы столкнулись с ошибкой в ​​узле в окнах и должны сообщить об этом.

Надеюсь, что это поможет!

+0

Спасибо. Я попробовал, команда ping просто отлично работает, так же как и мой первый дочерний процесс. Проблема возникает, когда дочерний процесс пытается разблокировать другого ребенка. Несмотря на то, что 'detached' делает его лидером новой группы процессов. –

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