2016-02-08 9 views
0

Я пытаюсь раскошелиться дочерний процесс узла сдочерний процесс Узел не может работать отдельно

child_process.fork("child.js") 

и он сказал в живых после родительских выходов. Я попытался с помощью отстраненного варианта, как так:

child_process.fork("child.js", [], {detached:true}); 

Который работает при использовании мицелия, но когда отдельностоящий верно, используя вилку он просто не может тихо, даже не выполняя child.js.

Я также попытался

var p = child_process.fork("child.js") 
p.disconnect(); 
p.unref(); 

Но ребенок все еще умирает, когда родитель делает. Любая помощь или понимание были бы оценены.

EDIT:

Узел Версия: v5.3.0 Платформа: Windows 8.1 Код:

//Parent 
var child_process = require("child_process"); 

var p; 
try{ 
    console.log(1) 
    p = child_process.fork("./child.js") 
    console.log(2) 
} catch(e){ 
    console.log(e) 
} 
p.on('error', console.log.bind(console)) 

p.disconnect(); 
p.unref(); 

//To keep process alive 
setTimeout(() => { 
    console.log(1); 
}, 100000); 

-

//Child 
var fs = require("fs"); 

console.log(3); 

fs.writeFileSync("test.txt", new Date().toString()); 

setTimeout(()=>{ 
    console.log(1); 
}, 100000); 

ответ

0

Я предполагаю, что вы выполняет свой родительский файл из командной строки, что, вероятно, почему оно «появляется», что разветвленный ребенок не выполняет. В действительности, когда родительский процесс завершается, терминал останавливается и, таким образом, печатает новую строку, ожидая следующей команды. Это заставляет думать, что ребенок не выполняет, но, поверьте, это так. Также нет опции «отсоединения» для child_process.fork

Добавьте некоторые инструкции console.log() в дочерний процесс, и вы должны увидеть печать ввода в своем терминале даже после выхода родителя. Если вы этого не сделаете, потому что ваш ребенок преждевременно выходит из-за ошибки. Запустите дочерний процесс напрямую, чтобы отладить его, прежде чем вызывать его из родителя.

Проверьте этот быстрый пример:

enter image description here

Надеется, что это помогает.

+0

Спасибо за ответ. Тем не менее, я использую монитор процесса и fileWriteSync'ing. Это определенно не выполняется. Единственное отличие между наблюдением за выполнением/невыполнением дочернего элемента - это отключенная опция, используемая в fork. – BrightEyed

+0

Чтобы прояснить, он отлично работает, когда не пытается отсоединить раздвоенный дочерний процесс. Но при попытке отсоединить его просто не работает. Итак, знаете ли вы, как создать отдельный дочерний процесс, используя fork, без использования отсоединения/использования отсоединения таким образом, который работает? – BrightEyed

+0

Я считаю, что child_process.fork по умолчанию отфильтровывает дочерний процесс, поэтому почему на fork() – DogNibbler