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

329
Vistas
¿Cómo interrumpir child_process mediante un comando dado por el proceso principal?

Actualmente estoy trabajando en un proyecto que requiere que el usuario haga clic en el botón 'ejecutar' para llamar a child_process en el backend para ejecutar una tarea que requiere mucho tiempo. Los códigos son los siguientes,

 let child = child_process.spawn(//args); let data = ''; let err = ''; for await(const chunk of child.stdout) { data += chunk; } for await(const chunk of child.stderr) { err += chunk; } return {"out": data, "err": err};

Aquí se omite la decodificación. La tarea de child_process generaría todos los resultados al final del proceso, por lo que no habría resultados mientras la tarea esté en curso.

Y la interfaz de usuario tiene un botón para que el usuario cancele la tarea mientras se está ejecutando. He intentado if (cancelFlag) {child.kill('SIGTERM')} justo después de child_process.spawn , pero no funcionó. ¿Supongo que se necesita un oyente para child_process?

Gran gracias por cualquier sugerencia.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Si está utilizando un sistema POSIX, enviar SIGTERM al niño debería eliminar el proceso de forma predeterminada.

Sin embargo, en Windows, SIGTERM solo está disponible para escuchar y no tiene un comportamiento predeterminado https://nodejs.org/api/process.html#signal-events .

Si está programando en Windows, debería poder agregar un oyente para la señal SIGTERM

about 4 years ago · Juan Pablo Isaza Denunciar

0

child_process.spawn acepta la señal y killSignal en las opciones para cancelar el proceso killSignal es SIGTERM por defecto, y la solución descrita en las respuestas anteriores

Pero aquí hay un ejemplo con un controlador de señal y cancelación.

 let abortController = new AbortController(); let child = ChildProcess.spawn("sleep", ["1"], { signal: abortController.signal, }); setTimeout(() => { abortController.abort(); }, 300);
about 4 years ago · Juan Pablo Isaza 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