Узел дочернего процесса не может выполняться отдельно
Я пытаюсь раскрутить дочерний процесс узла с
child_process.fork("child.js")
и пусть он скажет живым после выхода родителя. Я попытался использовать отключенную опцию так:
child_process.fork("child.js", [], {detached:true});
Что работает при использовании spawn, но когда значение detached равно true с использованием fork, оно просто молча завершается сбоем, даже не выполняя child.js.
Я также пытался
var p = child_process.fork("child.js")
p.disconnect();
p.unref();
Но ребенок все еще умирает, когда родитель. Любая помощь или понимание будет принята с благодарностью.
РЕДАКТИРОВАТЬ:
Версия узла: 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);
1 ответ
Я предполагаю, что вы выполняете свой родительский файл из командной строки, поэтому, вероятно, "кажется", что разветвленный дочерний элемент не выполняется. В действительности, когда родительский процесс завершается, терминал перестает ждать и, таким образом, печатает новую строку в ожидании вашей следующей команды. Это создает впечатление, что ребенок не выполняет, но поверьте мне, это так. Также нет "отдельного" параметра для child_process.fork
Добавьте несколько операторов console.log() в ваш дочерний процесс, и вы увидите печать ввода в своем терминале даже после выхода из родительского процесса. Если вы этого не сделаете, это потому, что ваш ребенок преждевременно выходит из-за ошибки. Запустите ваш дочерний процесс напрямую, чтобы отладить его, прежде чем вызывать его из родительского процесса.
Проверьте этот быстрый пример:
Надеюсь это поможет.