#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"],
});