Проблема с памятью узла Webkit с использованием дочернего процесса cp.fork - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь использовать 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

...