我使用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}`);
});
日志中没有记录任何内容。我该怎么做才能克服这种情况?
系统规格:
答案 0 :(得分:0)
我也经历过这一点。我提出的一个原因是因为儿童过程将是电子本身的子过程。 就我而言,它不会识别我定义的节点模块。 我建议使用spawn,其中spawn进程是node.exe。但是,一旦您构建应用程序,这将不切实际。