¿Cuál es el comando que se utiliza para salir? (es decir, terminar el proceso de Node.js)
Salir
let exitCode = 1; process.exit(exitCode)Códigos de salida útiles
1 - Catchall para errores generales 2 - Mal uso de shell incorporados (según la documentación de Bash) 126 - El comando invocado no puede ejecutarse 127 - "comando no encontrado" 128 - Argumento inválido para salir 128+n - Señal de error fatal “n” 130 - Script terminado por Control-C 255\* - Estado de salida fuera de rango
Depende de la razón por la que esté dispuesto a salir del proceso node.js, pero en cualquier caso, process.exit() es la última opción a considerar . Una cita de la documentación:
Es importante tener en cuenta que 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.En la mayoría de las situaciones, en realidad no es necesario llamar explícitamente a
process.exit(). El proceso de Node.js se cerrará por sí solo si no hay trabajo adicional pendiente en el bucle de eventos. La propiedadprocess.exitCodese puede configurar para decirle al proceso qué código de salida debe usar cuando el proceso finaliza correctamente.
Analicemos las posibles razones por las que podría estar dispuesto a salir del proceso node.js y por las que debería evitar el process.exit() :
Si el script ha llegado a su fin y el intérprete de nodo no se cierra, indica que algunas operaciones asincrónicas aún están pendientes. Es incorrecto forzar la finalización del proceso con process.exit() en este punto. Es mejor tratar de entender qué impide que su secuencia de comandos salga de la manera esperada . Y cuando resuelva esto, puede usar process.exitCode para devolver cualquier resultado al proceso de llamada.
Por ejemplo, si está dispuesto a cerrar con gracia una aplicación Express . A diferencia de la secuencia de comandos de la línea de comandos, la aplicación Express sigue ejecutándose infinitamente, esperando nuevas solicitudes. process.exit() será una mala opción aquí porque interrumpirá todas las solicitudes que están en proceso. Y algunos de ellos pueden ser no idempotentes (ACTUALIZAR, ELIMINAR). El cliente nunca sabrá si esas solicitudes se completaron o no en el lado del servidor y podría ser la razón de la inconsistencia de datos entre el cliente y el servidor. La única buena solución es decirle al servidor http que deje de aceptar nuevas solicitudes y espere a que terminen las pendientes con server.close() :
var express = require('express'); var app = express(); var server = app.listen(80); process.on( 'SIGTERM', function () { server.close(function () { console.log("Finished all requests"); }); });Si aún no sale, vea el Caso 1.
Siempre es mejor throw un error, obtendrá un seguimiento de pila y un mensaje de error con un formato agradable. Los niveles superiores de código siempre pueden decidir si pueden manejar el error ( catch ) o dejar que bloquee el proceso. Por otro lado, process.exit(1) terminará el proceso silenciosamente y no habrá posibilidad de recuperarse de esto. Puede ser el único "beneficio" de process.exit() , puede estar seguro de que el proceso finalizará.
REPL (Línea de comandos)
Presione ctrl + c dos veces
Escribe .exit y presiona enter
Archivo de comandos
process.exit(code)El nodo normalmente sale con el código 0 cuando no hay más operaciones asincrónicas pendientes.
process.exit(1) debe usarse para salir con un código de falla. Esto nos permitirá inferir que el nodo no se cerró correctamente y fue forzado a cerrarse.
Hay otros códigos de salida como
3 - Error interno de análisis de JavaScript (muy, muy raro)
5 - Error fatal en el motor javascript v8
9 - Argumento inválido
Para obtener una lista completa, consulte los códigos de salida del nodo
Presione Ctrl + C dos veces o .exit .
> (To exit, press ^C again or type .exit) >Pude hacer que todos mis procesos de nodo murieran directamente desde el shell de Git Bash en Windows 10 escribiendo taskkill -F -IM node.exe ; esto finaliza todos los procesos de nodo en mi computadora a la vez. Descubrí que también podía usar taskkill //F //IM node.exe . No estoy seguro de por qué tanto - como // funcionan en este contexto. ¡Espero que esto ayude!
Si está en Windows, vaya al Administrador de tareas, luego vaya a Procesos, busque un proceso llamado "nodo", luego haga clic en él con el botón derecho del mouse y luego haga clic en la opción "Terminar proceso".
Abra la terminal de línea de comando donde se ejecuta la aplicación de nodo y presione Ctrl + C
si desea salir de una aplicación de nodo js desde el código,
process.exit(); // graceful termination process.exit(1); // non graceful termination Si desea forzar el ciclo de ejecución para que detenga el proceso, puede usar el proceso de variable global que es una instancia de EventEmitter . Entonces, cuando llama a process.exit() , en realidad emite el evento de salida que finaliza todas las tareas de inmediato, incluso si todavía hay operaciones asincrónicas que no se han realizado.
process.exit() toma un código de salida (Integer) como parámetro. El código 0 es el predeterminado y esto significa que sale con un 'éxito'. Mientras que el código 1 significa que sale con un 'fallo'.
Como el proceso es un objeto global, no necesita importar ningún módulo. La siguiente función cierra o elimina el proceso del nodo actual.
proceso.salir(código)
proceso.matar(proceso.pid)
proceso.abortar()
si desea salir de la aplicación node js, escriba
process.exit(1)en tu código
Puede usar la función process.exit([code]) .
Si desea salir sin un 'fallo', utilice el código 0 :
process.exit(0); Para salir con un código de 'fallo' 1 , puede ejecutar:
process.exit(1);El código de 'fallo' del fallo es específico de la aplicación. Así que puedes usar tus propias convenciones para ello.
ctrl + C para terminar el proceso actual
ctrl + C dos veces es para salir del shell REPL
ctrl + c para salir de REPL SHELL
agregando
process.exit(1);hará el truco por ti
import mongosse from 'mongoose' import dotenv from 'dotenv' import colors from 'colors' import users from './data/users.js' import products from './data/products.js' import User from './models/userModel.js' import Product from './models/productModel.js' import Order from './models/orderModel.js' import connectDB from './config/db.js' dotenv.config() connectDB() const importData = async()=>{ try{ await Order.deleteMany() await Product.deleteMany() await User.deleteMany() const createdUsers = await User.insertMany(users) const adiminUser = createdUsers[0]._id sampleProducts = products.map(product =>{ return {...product, user:adiminUser } }) await Product.insertMany(sampleProducts) console.log('Data Imported!'.green.inverse) process.exit() //success and exit }catch(error){ consolele.log(`${error}`.red.inverse) process.exit(1) //error and exit } }así que aquí estoy completando algunas colecciones en una base de datos y en el bloque de prueba si no obtengo ningún error, salimos con un mensaje de éxito, entonces para eso usamos process.exit() sin nada en el parámetro. Si hay un error, debemos salir con un mensaje de error, por lo que pasamos 1 en el parámetro como este, process.exit(1).
extra: aquí por salir nos referimos a salir de ese programa típico de node js. por ejemplo, si este código estaba en un archivo llamado dbOperations.js, entonces el proceso.salir se cerrará y no ejecutará ningún código que siga después del proceso.salir
Tengo una aplicación que quería:
Tuve que enlazar process.exit(code) a un controlador de eventos de exit , de lo contrario, el correo no se enviará ya que llamar a process.exit(code) elimina directamente los eventos asincrónicos.
#!/usr/bin/nodejs var mailer = require('nodemailer'); var transport = mailer.createTransport(); mail = { to: 'Dave Bowman', from: 'HAL 9000', subject: 'Sorry Dave', html: 'Im sorry, Dave. Im afraid I cant do <B>THAT</B>.' } transport.sendMail(mail); //process.exit(1); process.on('exit', function() { process.exit(1); });Desde el código, puede usar process.exit([errorcode]) donde [errorcode] es un número entero opcional ( 0 es el valor predeterminado para indicar el éxito).
Si está utilizando Read Eval Print Loop (REPL) , puede usar Ctrl + D o escribir .exit
Alternativamente, en Windows o Linux puede usar Ctrl + C , Ctrl + C
En Mac el comando es Ctrl + Z , Ctrl + Z
Si está en una terminal de Unix o en la línea de comandos de Windows y desea salir de Node REPL, ya sea...
.exit y presione Entrar, oSolo una nota de que usar process.exit([number]) no es una práctica recomendada .
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.En la mayoría de las situaciones, en realidad no es necesario llamar explícitamente a
process.exit(). El proceso de Node.js se cerrará por sí solo si no hay trabajo adicional pendiente en el bucle de eventos. La propiedadprocess.exitCodese puede configurar para decirle al proceso qué código de salida debe usar cuando el proceso finaliza correctamente.Por ejemplo, el siguiente ejemplo ilustra un mal uso del método
process.exit()que podría provocar que los datos impresos en la salida estándar sestdouty se pierdan:// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }La razón por la que esto es problemático es porque las escrituras en
process.stdouten Node.js a veces son asincrónicas y pueden ocurrir en múltiples tics del bucle de eventos de Node.js. Sin embargo, llamar aprocess.exit()obliga al proceso a salir antes de que se puedan realizar esas escrituras adicionales enstdout.En lugar de llamar a
process.exit()directamente, el código debe establecer el código de salida deprocess.exitCodey permitir que el proceso finalice de forma natural al evitar programar cualquier trabajo adicional para el bucle de eventos:// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
Como señaló @Dominic, arrojar un error no detectado es una mejor práctica en lugar de llamar a process.exit([code]) :
process.exitCode = 1; throw new Error("my module xx condition failed");
Desde la línea de comando, .exit es lo que desea:
$ node > .exit $Está documentado en los documentos REPL . REPL (Read-Eval-Print-Loop) es como se llama la línea de comandos de Node.
Desde un programa normal, use process.exit([code]) .
De la documentación oficial de nodejs.org :
process.exit(code)Finaliza el proceso con el código especificado. Si se omite, la salida usa el código de 'éxito' 0.
Para salir con un código de 'fallo':
process.exit(1);Llame al método de exit del objeto de process global:
process.exit()
process.exit([exitcode])Finaliza el proceso con el
codeespecificado. Si se omite, la salida usa el código de 'éxito'0.Para salir con un código de 'fallo':
process.exit(1);El shell que ejecutó el nodo debería ver el código de salida como
1.