背景

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

1
2
// foo.js
console.log("bar");
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// main process
import { fork } from "node:child_process";

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

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

解决方法

使用 utilityProcess

1
2
3
4
//  foo.js
console.log("bar");
process.parentPort.postMessage("exitManually");
process.exit(0);
1
2
3
4
5
6
7
8
9
//  main process
import { utilityProcess } from "electron";

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