Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

619
Vistas
Nodejs: el proceso secundario no sale después de llamar a unref ()

De acuerdo con los documentos de nodejs, la opcióndetached al crear un ChildProcess permite que el proceso secundario continúe ejecutándose después de que el padre sale.

Y el métodounref() en ChildProcess permite que el padre salga y no espere a que el proceso hijo salga.

De forma predeterminada, el padre esperará a que el hijo separado salga. Para evitar que el padre espere a que finalice un subproceso determinado, utilice el método subprocess.unref(). Si lo hace, el bucle de eventos del padre no incluirá al hijo en su recuento de referencias, lo que permitirá que el padre salga independientemente del hijo, a menos que haya un canal IPC establecido entre el hijo y el padre.

Cuando se utiliza la opción separada para iniciar un proceso de ejecución prolongada, el proceso no seguirá ejecutándose en segundo plano después de que el principal salga, a menos que se le proporcione una configuración de stdio que no esté conectada al principal. Si se hereda el stdio del padre, el hijo permanecerá conectado a la terminal de control.

Estoy tratando de crear un proceso secundario que haga un trabajo de larga duración y no quiero que el padre lo esté esperando.

Aquí está parent.js

 import { fork } from "child_process"; console.log(`process.pid: ${process.pid}`); process.on("beforeExit", () => { console.log("parent exiting..."); }); const forked = fork("./child.js", { detached: true, stdio: "ignore", }); forked.unref();

y aquí está child.js

 const main = async () => { return new Promise((resolve) => { setTimeout(() => { console.log("resolving"); resolve(); }, 10 * 1000); }); }; main();

El child.js es un script trivial, pero mi caso de uso implica que el proceso secundario ejecute algunos cálculos durante un período específico, que sería de 10,20 segundos.

Al ejecutar el código anterior, el evento beforeExit se emite solo después de 10 segundos, que es cuando el proceso secundario debería estar saliendo. Pero de acuerdo con el código y los documentos, ¿no debería salir el padre tan pronto como se crea el proceso hijo? O más bien, unref() -ed?

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda