Electron - 检测并处理 Linux 中的 SIGINT/SIGTERM 信号
Electron - Detect and handle SIGINT/SIGTERM Signals in Linux
您可以侦听 SIGINT/SIGTERM 并在用户使用 process.on
在节点 js 的终端中按下 CTRL-C 时停止您的应用程序退出(如果它是从一个终端启动的),但是同样在我的电子应用程序中不起作用。我还尝试将处理程序绑定到 app
对象的“quit”、“before-quit”和“will-quit”事件,但无济于事。是否可以检测用户是否从终端打开应用程序并在电子应用程序中按下 CTRL-C,并将处理程序绑定到它并阻止应用程序退出。如果是,那么您将如何实现这一目标?
这是我在基本电子主进程中使用 process.on
和 app.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。
您注册事件侦听器的时间过早。我修改了您的代码以在 whenReady
之后的块中包含所有侦听器并获得了您期望的结果。
您可以侦听 SIGINT/SIGTERM 并在用户使用 process.on
在节点 js 的终端中按下 CTRL-C 时停止您的应用程序退出(如果它是从一个终端启动的),但是同样在我的电子应用程序中不起作用。我还尝试将处理程序绑定到 app
对象的“quit”、“before-quit”和“will-quit”事件,但无济于事。是否可以检测用户是否从终端打开应用程序并在电子应用程序中按下 CTRL-C,并将处理程序绑定到它并阻止应用程序退出。如果是,那么您将如何实现这一目标?
这是我在基本电子主进程中使用 process.on
和 app.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。
您注册事件侦听器的时间过早。我修改了您的代码以在 whenReady
之后的块中包含所有侦听器并获得了您期望的结果。