Разветвленный дочерний процесс завершается с кодом 1

Я обернул модуль с помощью Electron Packager. Поскольку он требует больших вычислений, я поместил его в подпроцесс, который будет forked из renderer.js, когда пользователь нажмет кнопку на index.html.

Псевдокод renderer.js от:

let cp = require('child_process');
let subprocess;
function log(msg) {
    // A function to log messages sent from subprocess
}
document.querySelector('#create').addEventListener('click', ev => {
  subprocess = cp.fork('./subprocess.js');
  log('A subprocess has been created with pid: ' + subprocess.pid + ' with exexPath = ' + process.execPath);
  subprocess.on('exit', (code, signal) => log(`child process terminated: signal = ${signal} ; code = ${code}`));
  subprocess.on('error', log);
  subprocess.on('message', log);
});

Настоящая проблема заключается в следующем: этот подпроцесс работает гладко, когда я вызываю electron ./ из консоли в рабочем каталоге, но сборка, сгенерированная Electron Packager, не работает.

Подпроцесс не отображается в диспетчере задач, вернее, завершается, как только появляется. В журнале указано child process terminated: signal = null ; code = 1.

Хотя я караулил в начале subprocess.js с этим, чтобы поймать uncaughtException

process.on('uncaughtException', (err) => {
   process.send(`Caught exception: ${err}`);
});

В лог ничего не записывается. Что я должен сделать, чтобы преодолеть эту ситуацию?

Системные характеристики:

  • Окно 10
  • Узел 8.6
  • Электрон 1.7.12
  • Электронный упаковщик 10.1.2

person phet    schedule 02.02.2018    source источник


Ответы (1)


Я тоже испытал это. Одна из причин, которую я придумал, заключалась в том, что дочерний процесс будет дочерним процессом самого электрона. В моем случае он не распознает модули узлов, которые я определил. Я предлагаю использовать spawn с процессом spawn, являющимся node.exe. Но это будет непрактично, как только вы создадите свое приложение.

person auphali    schedule 21.05.2018
comment
Я пытался посмотреть на github, как люди разветвляются, но безрезультатно. - person phet; 22.05.2018