Уничтожение оболочки

#node.js #express #child-process

#node.js #экспресс #дочерний процесс

Вопрос:

Я не уверен, что это ошибка или особенность, но при уничтожении оболочки (использовании kill -9 <pid> ) она не завершает процесс, так как в ней вызывается событие exit, но весь код продолжает выполняться. Вот мой код

 // index.js
const { spawn } = require("child_process");

const deploy = spawn(`node server`, {
  shell: true,
});

console.log(deploy.pid); // I use this to get the PID so i can use the kill command

deploy.stdout.on("data", (data) => {
  console.log(data.toString());
});

deploy.stderr.on("data", (data) => {
  console.log(data.toString());
});

deploy.on("exit", (code) => {
  console.log("exit");
});
  
 // server.js
const app = require("express")();

app.use("/", (req, res) => {
  console.log("debug");
  res.send("Hello, World");
});

app.listen(8000, () => console.log("Site Online"));
  

Ответ №1:

Согласно документам, использование sh команды в Linux с -c флагом 1) Устраняет проблему, из-за которой она не закрывается, 2) Позволяет запускать несколько команд без shell опции, которая вызывает проблему в первую очередь.

Пример:

 const deploy = spawn("sh", ["-c", `node server amp;amp; ls`], {
  stdio: ["inherit", "inherit", "inherit"],
});