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

334
Vistas
Cómo REALMENTE matar un child_process nodejs

Estoy usando mocha con Nodejs para probar mi restApi. Cuando ejecuto mocha, le digo a mi prueba que cree un child_process y ejecute la API para poder hacerle solicitudes.

El problema es que cada vez que la prueba finaliza (finaliza o falla), parece que la API sigue ejecutándose en segundo plano. He visto algunas respuestas aquí que dan instrucciones para eliminar manualmente el proceso secundario cada vez que sale el proceso principal. Así que lo hice así:

 export function startProcess(done) { const child = spawn('babel-node', ["app.js"]); child.stdout.on("data", function(data) { data = data.toString(); // console.log(data.toString()); if(data.indexOf("Server online") > -1) done(); }); child.stderr.on('data', function(err) { console.log("ERROR: ", err.toString()); }); child.on('exit', function(code) { console.log("PROPERLY EXITING"); console.log("Child process exited with code", code); }); process.on('exit', function(code) { console.log("Killing child process"); child.kill(); console.log("Main process exited with code", code); }); }

Cuando el proceso principal sale, registra "Killing child process", lo que significa que se child.kill() . Pero si trato de ejecutar mi prueba nuevamente, cuando se llama al comando de generación, la API arroja un error

Error: escucha EADDRINUSE :::3300

, lo que significa que la API aún se está ejecutando y se toma esa dirección de puerto.

Así que tengo que ejecutar sudo pkill node para eliminar realmente todo el proceso del nodo y luego npm test vuelve a funcionar.

¿Me estoy perdiendo de algo? ¿Es esta realmente la manera de lograr lo que estoy esperando?

Pensé en usar child_process.exec para ejecutar sudo pkill node en mi procesador. on process.on('exit') oyente, pero eso no parece ser algo inteligente.

Esto está sucediendo tanto en Mac como en Ubuntu.

¿Alguna sugerencia? Gracias

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

"salir" es un evento que se activa cuando el nodo finaliza su ciclo de eventos internamente, no se activa cuando finaliza el proceso externamente.

Lo que estás buscando es ejecutar algo en un SIGINT.

Eche un vistazo a http://nodejs.org/api/process.html#process_signal_events

over 4 years ago · Santiago Trujillo Denunciar
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