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

179
Vistas
¿Cómo atrapo * e ignoro * SIGINT en Node.js?

Encontré una publicación diferente sobre un tema relacionado ( Cómo realizar una operación asíncrona al salir ), pero tal vez no se aplica a macOS, o simplemente ya no es cierto cuando se ejecuta Node.js v14.

Mi pregunta original era más complicada. No pude obtener setTimeout s o await a que funcionara correctamente en una devolución de llamada (o devolución de llamada asíncrona) para SIGINT. Pero luego me di cuenta de que lo que realmente necesitaba hacer, ante todo, era poder capturar e ignorar SIGINT.

Si pudiera hacer eso, también podría apagarme en respuesta a SIGINT, si quisiera y cuando quisiera.

Así que volví a lo básico para ver si podía simplemente deshabilitar SIGINT. no pude

Podía detectar SIGINT, podía responder con mensajes de consola o cualquier otro código síncrono , pero mi código se iba a cerrar, y cerraría pronto, sin importar lo que hiciera.

 process.on('SIGINT', () => { console.log('here'); return false; }); process.on('SIGINT', () => { console.log('here'); return true; }); process.on('SIGINT', () => { console.log('here'); return undefined; }); process.on('SIGINT', () => { console.log('here'); return new Promise(resolve => { console.log(resolve); }); });

Ninguno de estos enfoques evita que mi servidor Node.js se apague después de presionar Ctrl + C o enviar un SIGINT al proceso.

ACTUALIZAR:

Cuando ejecuto mi servidor a través node app.js , ¡la intercepción SIGINT funciona como debería!

Aparentemente, me he estado volviendo loco por un artefacto de ejecutar mi aplicación de servidor indirectamente a través nodemon . Un Ctrl + C desde la terminal de mi IDE, o una interrupción enviada usando el botón gráfico rojo 🟥 (detener) del IDE no se puede capturar correctamente, porque la señal resultante realmente se envía a nodemon. Sin embargo, fuera del entorno IDE, sin que nodemon se dé cuenta de las cosas, mi apagado elegante funciona como quiero.

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

0

Si observa este tipo de comportamiento de apagado inesperado, siempre piense "¿quién está enviando qué señal?". Dependiendo del sistema operativo y otros procesos, se podrían enviar muchas otras señales, por ejemplo, consulte ¿Cómo se relaciona SIGINT con las otras señales de terminación, como SIGTERM, SIGQUIT y SIGKILL? .

Lo que probablemente sucedía en su caso era que el proceso de nodemon estaba enviando un SIGKILL después del SIGINT . Existen varias señales de este tipo que no se pueden cancelar. nodemon permite controlar la señal de terminación predeterminada a través de --signal , consultehttps://github.com/remy/nodemon/blob/master/doc/cli/options.txt . nodemon también se puede configurar a través de un archivo de configuración local y global, consulte https://github.com/remy/nodemon/blob/master/doc/cli/config.txt .

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