分叉子进程使用代码1终止

时间:2018-02-02 16:24:39

标签: node.js electron child-process electron-packager

我使用Electron Packager包装了一个模块。因为计算量很大,所以当用户点击fork上的按钮时,我会将其放在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}`);
});

日志中没有记录任何内容。我该怎么做才能克服这种情况?

系统规格

  • Window 10
  • 节点8.6
  • Electron 1.7.12
  • Electron Packager 10.1.2

1 个答案:

答案 0 :(得分:0)

我也经历过这一点。我提出的一个原因是因为儿童过程将是电子本身的子过程。 就我而言,它不会识别我定义的节点模块。 我建议使用spawn,其中spawn进程是node.exe。但是,一旦您构建应用程序,这将不切实际。