【问题标题】:Electron - Detect and handle SIGINT/SIGTERM Signals in LinuxElectron - 在 Linux 中检测和处理 SIGINT/SIGTERM 信号
【发布时间】:2021-06-25 13:50:00
【问题描述】:

当用户使用process.on 在节点 js 中按下 CTRL-C 时(如果它是从一个终端启动的),您可以监听 SIGINT/SIGTERM 并阻止您的应用退出,但在我的电子应用。我还尝试将处理程序绑定到app 对象的“quit”、“before-quit”和“will-quit”事件,但无济于事。是否可以检测用户是否从终端打开应用程序并在电子应用程序中按下 CTRL-C,并将处理程序绑定到它并阻止应用程序退出。如果是,那么您将如何实现这一目标?

以下是我在基本电子主进程中使用process.onapp.on 的方式,以防我做错了什么(我的原始脚本包含很多与问题无关的代码,而我想要实现的目标并不也可以使用基本的电子快速入门应用程序):

const { app, BrowserWindow } = require("electron");
const path = require("path");

function createWindow() {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(__dirname, "preload.js"),
        },
    });

    win.loadFile("index.html");
}

app.whenReady().then(() => {
    createWindow();

    app.on("activate", function () {
        if (BrowserWindow.getAllWindows().length === 0) createWindow();
    });
});

app.on("will-quit", (e) => {
    console.log("App recieved request to quit");
    e.preventDefault();
});

app.on("before-quit", (e) => {
    console.log("App recieved request to quit");
    e.preventDefault();
});

app.on("quit", (e) => {
    console.log("App recieved request to quit");
    e.preventDefault();
});

process.on("SIGINT SIGTERM", () => {
    console.log("Detected SIGINT/SIGTERM");
});

process.on("SIGTERM", () => {
    console.log("Detected SIGTERM");
});

这个问题只涉及 Linux。

【问题讨论】:

  • 所有这些都应该工作,发布你的代码
  • 编辑了问题

标签: node.js linux electron signals


【解决方案1】:

您注册事件侦听器的时间过早。我修改了你的代码,将whenReady之后的所有监听器都包含在块中,并得到了你期望的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 2020-07-03
    • 2020-05-11
    • 2016-01-20
    • 2013-12-21
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多