He estado leyendo la documentación y no se indica explícitamente si el proceso de Node.js sale inmediatamente o no si no se registra ningún controlador de señal. Por ejemplo, ¿se ejecutan las tareas pendientes en la cola de sondeo o se descarta todo? ¿El programador siempre tiene que manejar el apagado correcto explícitamente al realizar un seguimiento de todas las promesas pendientes?
Cuando no se agrega un controlador para SIGTERM , el nodo restablecerá el terminal y saldrá del proceso inmediatamente. Es una salida de "dejar todo donde está". Incluso más que process.exit , que aún permite que se active el evento de exit :
Llamar a
process.exit()obligará al proceso a salir lo más rápido posible incluso si todavía hay operaciones asincrónicas pendientes que aún no se han completado por completo, incluidas las operaciones de E/S aprocess.stdoutyprocess.stderr.
Cuando se agrega un controlador de señal ( process.once('SIGTERM') , el código del controlador se programa para el siguiente ciclo de eventos. Por lo tanto, el comportamiento cambia inmediatamente incluso si solo llama a process.exit() en el controlador.
Las promesas, o Javascript en general, aún no tienen incorporado el concepto de cancelación. Puede realizar un seguimiento de las promesas, pero a menos que la API subyacente se utilice específicamente para abordar formas de cancelar tareas, no hay mucho que hacer.
Aunque puedes esperar . En la aplicación web promedio, si cierra el servidor web y cierra la conexión a la base de datos. Las conexiones existentes se completarán, no se iniciarán nuevas conexiones, eventualmente el proceso se cerrará solo cuando no quede nada en el ciclo de eventos para ejecutar. wtfnode puede ser útil para ayudar a depurar procesos que finalmente no se cierran así.