Как правильно завершить процесс Python, порожденный электронным приложением?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно завершить процесс Python, порожденный электронным приложением?

Сообщение Anonymous »

Я разрабатываю приложение Electron, которое использует исполняемый файл Python в качестве внутреннего сервера. Серверная часть Python создается с помощью child_process.spawn. Хотя приложение большую часть времени работает нормально, я заметил, что когда пользователь выходит из приложения, внутренний процесс Python не всегда завершается. Это приводит к запуску процессов-зомби в фоновом режиме, что является проблематичным.
Это порождает exe-файл Python:

Код: Выделить всё

const { spawn } = require("child_process");
const kill = require("tree-kill");

let pythonBackend;

function startBackend() {
pythonBackend = spawn("path/to/python_backend.exe");

pythonBackend.stdout.on("data", (data) => {
console.log(`stdout: ${data}`);
});

pythonBackend.stderr.on("data", (data) => {
console.error(`stderr: ${data}`);
});

pythonBackend.on("close", (code) => {
console.log(`child process exited with code ${code}`);
});
}
И это попытка остановить это

Код: Выделить всё

async function stopBackend() {
if (pythonBackend) {
if (process.platform === "win32") {
exec(`taskkill /PID ${pythonBackend.pid} /T /F`, (err) => {
if (err) {
console.error("Failed to kill process:", err);
} else {
console.log("Process killed");
}
});
} else {
kill(pythonBackend.pid, "SIGTERM", (err) => {
if (err) {
console.error("Failed to kill process:", err);
} else {
console.log("Python process and its children killed");
}
});
}
pythonBackend = null;
}
}

app.on("before-quit", stopBackend);
app.on("quit", stopBackend);
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});

process.on("exit", stopBackend);
process.on("SIGINT", () => {
stopBackend();
process.exit(0);
});
Ни на Mac, ни на Windows он, следовательно, убивает процесс Python. Иногда он просто ничего не делает без какой-либо обратной связи.
Мой вопрос: есть ли надежный способ гарантировать, что exe-файл Python всегда будет завершаться при выходе из электронного приложения?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ectron-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Рекурсивно зацепите каждый порожденный процесс
    Anonymous » » в форуме Android
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Рекурсивно зацепите каждый порожденный процесс
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Может ли поток (порожденный основным потоком) создать несколько дочерних потоков?
    Гость » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Гость
  • Как правильно завершить многопроцессорный процесс Python, который запускает конвейер GStreamer?
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Исполняемые/устанавливаемые файлы с электронным FE и Python BE.
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»