Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

177
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!