背景

我们现在要在 Electron 项目中通过 node 执行一个 js 文件。目前比较合适的方法是使用 fork, 但是却无法监听退出时间。

// foo.js
console.log("bar");
// main process
import { fork } from "node:child_process";

const child = fork("foo.js");

child.on("exit", () => {
  console.log("根本不执行");
});
child.on("close", () => {
  console.log("根本不执行");
});

解决方法

使用 utilityProcess

//  foo.js
console.log("bar");
process.parentPort.postMessage("exitManually");
process.exit(0);
//  main process
import { utilityProcess } from "electron";

const child = utilityProcess.fork("foo.js");
child.on("message", (msg) => {
  if (msg === "exitManually") {
    console.log("执行完了!");
  }
});