首页 > 解决方案 > Electron - 在 Linux 中检测和处理 SIGINT/SIGTERM 信号

问题描述

您可以监听 SIGINT/SIGTERM 并在用户在节点 js 中使用 CTRL-C 按下终端(如果它是从一个终端启动)时停止您的应用程序退出process.on,但这在我的电子应用程序中不起作用。我还尝试将处理程序绑定到对象的“退出”、“退出前”和“将退出”事件,app但无济于事。是否可以检测用户是否从终端打开应用程序并在电子应用程序中按下 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.jslinuxelectronsignals

解决方案


您太早地注册了事件侦听器。我修改了您的代码以在之后的块中包含所有侦听器,whenReady并获得了您期望的结果。


推荐阅读