Я пытаюсь использовать cp.fork из библиотеки узлов child_process в контексте узла приложения Node Webkit (v0.45.1). Главное приложение должно иметь возможность запускать дочерний процесс нажатием кнопки, а дочерний процесс должен иметь возможность связываться с родительским приложением, используя "process.send" и process.on ('message').
Текущая настройка выглядит следующим образом.
index. html:
<script>
function launch(config){
var cp = require('child_process'),
child = process.cwd() + '/my-child-process.js';
var childProcess = cp.fork(child,[JSON.stringify(config)]);
childProcess.on('message', (msg) => {
updateWindowDisplay(msg); //adds the message to a visible textarea in the main window
});
childProcess.on('exit', (code) => {
console.log('Process exit event with code: ', code);
alert('Child process terminated!')
});
}
$('#launch-button').on('click',function(){
var config = { freq: $('input[name=run-freq]').val() };
launch(config);
});
</script>
my-child-process. js:
var config = JSON.parse(process.argv[2]);
config.logFunction = function(msg){
process.send({ msg: msg});
console.log(msg);
};
function runProcess(inputConfig){
function helloLoop(){
inputConfig.logFunction('Hello World!');
setTimeout(function(){
helloLoop();
},inputConfig.freq * 1000);
}
helloLoop();
}
runProcess(config);
При нажатии Кнопка, дочерний процесс успешно запустится (сообщения «Hello World» принимаются и отображаются через регулярные промежутки времени), но затем, кажется, завершает себя (чистый код выхода 0) случайным образом. когда дочерний процесс умирает, но если я дам ему больше работы (например, хранить большие массивы в памяти, выполнять HTTP-запросы к удаленным серверам / анализировать ответ и c), он будет ie раньше, что заставляет меня подозревать недостаточно памяти для дочернего процесса.
Если я попытаюсь запустить дочерний процесс из родительского nodejs приложения (т.е. не из Webkit), я не столкнусь с этой проблемой. Если предположить, что вышеприведенный вывод верен, есть ли способ гарантировать, что дочерние процессы запускаются с достаточным выделением памяти / общим ресурсом, чем у родительского?
*** Edit *** Дочерний процесс не завершается чисто. Код выхода 3221225477