es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Escribe en stdin del proceso hijo que se ha creado mientras pueda ser detenido por separado.

Para un proceso principal de interfaz de línea de comandos (CLI), tengo un proceso hijo al que necesito escribir algunos datos antes de detenerlo (por ejemplo, un código de cierre de WebSocket distinto de 1006).

Este fragmento representa lo que estoy haciendo:

setInterval(() => child.stdin.write("ping\n"), 1000);

const { spawn } = require("child_process");
const child = spawn("node", ["-e",
setInterval(() => console.log("child: pong"), 1000);
process.on("beforeExit", () => {
  console.log("child: stopping");
});
process.stdin.on("close", () => console.log("stdin close"));
process.stdin.on("finish", () => console.log("stdin finish"));
process.on("SIGINT", () => console.log("child: SIGINT"));
process.stdin.on("data", (c) => console.log("child: from parent:", c.toString("utf8").trim()));
], {
  detached: true,
  //// si se utiliza 'ignore', child.stdin es indefinido
  // stdio: ["ignore", "inherit", "inherit"],
});
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);

process.on("SIGINT", () => {
  console.log("parent: se solicitó detener");
  child.stdin.write("stop\n"); // limpiar algo
  setTimeout(() => {
    console.log("parent: deteniendo por nuestra propia discreción");
    child.kill(0);
    process.exit(0);
  }, 500);
});

He intentado usar un Stream.Readable o un Passthrough como propiedad de flujo de stdio, pero parece que NodeJS solo permite el uso de flujos de descriptor de archivo. No quiero llegar al punto de crear un archivo temporal solo para este caso.

Siento que esto debería ser posible / trivial, pero me estoy volviendo loco intentando hacer que funcione.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema al que se enfrenta el experto en TI es que necesita escribir algunos datos en un proceso secundario antes de que se detenga, pero no puede utilizar un Stream.Readable o Passthrough como propiedad de flujo stdio porque NodeJS solo permite el uso de flujos de descripción de archivos.

    El experto ya intentó usar un Stream.Readable o Passthrough, pero no funcionó. No quiere crear un archivo temporal solo para este caso.

    Parece que la solución a este problema no es trivial y el experto está luchando actualmente por encontrar una manera de hacer que funcione.

Comments are closed.