Pregunta Cómo salir en Node.js


¿Cuál es el comando que se usa para salir? (es decir, terminar el proceso node.js)


1359
2018-03-10 21:30


origen


Respuestas:


Llamar al global process objetos exit método:

process.exit()

De los documentos:

process.exit ([código])

Finaliza el proceso con lo especificado code. Si se omite, exit usa el código de 'éxito' 0.

Para salir con un código de 'falla':

process.exit(1);

El shell que ejecutó el nodo debería ver el código de salida como 1.


1693
2018-03-10 21:36



Del oficial nodejs.org documentación:

process.exit(code)

Finaliza el proceso con el código especificado. Si se omite, exit usa el código de 'éxito' 0.

Para salir con un código de 'falla':

process.exit(1);

320
2018-03-22 18:48



Si está en una terminal Unix o en la línea de comando de Windows y desea salir de Node REPL, ya sea ...

  • prensa Ctrl + do dos veces, o
  • tipo .exit y presiona Enter, o
  • prensa Ctrl + re al comienzo de una línea (solo Unix)

236
2018-06-02 13:02



Solo una nota que usa process.exit([number]) es no recomendado práctica.

La razón por la que esto es problemático es porque escribe para procesar.   Node.js no son bloqueantes y pueden ocurrir en múltiples tics de la   Loop de evento Node.js Llamar a process.exit (), sin embargo, fuerza al   proceso para salir antes de esas escrituras adicionales a stdout puede ser   realizado.

En lugar de llamar directamente a process.exit (), el código debe establecer el   process.exitCode y permite que el proceso salga naturalmente evitando   programar cualquier trabajo adicional para el ciclo de eventos:

Si puede, debe establecer el código de salida y permitir que Node salga con gracia:

process.exitCode = 1;

175
2017-07-06 05:52



Desde la línea de comando, .exit es lo que quieres:

$ node
> .exit
$

Está documentado en el REPL docs. REPL (Read-Eval-Print-Loop) es a lo que se llama la línea de comando Node.

De un programa normal, use process.exit([code]).


109
2017-10-29 16:51



Depende de la razón por la que está dispuesto a salir del proceso node.js, pero en cualquier caso process.exit() es el última opción para considerar. Una cita de la documentación:

Es importante tener en cuenta que llamar process.exit() forzará la   proceso para salir tan rápido como sea posible, incluso si todavía hay   operaciones asíncronas pendientes que aún no se han completado por completo,   incluidas las operaciones de E / S para process.stdout y process.stderr.

En la mayoría de las situaciones, no es realmente necesario llamar    process.exit() explícitamente. El proceso Node.js saldrá por sí mismo   si no hay trabajo adicional pendiente en el ciclo de eventos. los    process.exitCode la propiedad se puede configurar para indicarle al proceso qué salida   código para usar cuando el proceso sale con gracia.

Vamos a cubrir posibles razones por las que podrías estar dispuesto a salir del proceso node.js y por qué debes evitar process.exit():

Caso 1 - Ejecución completa (script de línea de comando)

Si el script ha llegado a su fin y el intérprete del nodo no sale, indica que algunas operaciones asíncronas aún están pendientes. Está mal forzar la terminación del proceso con process.exit() en este punto. Es mejor tratar de entender ¿Qué impide que su script salga de la manera esperada?. Y cuando arregles esto, puedes usar process.exitCodepara devolver cualquier resultado al proceso de llamada.

Caso 2 - Terminación debido a señal externa (SIGINT / SIGTERM / otro)

Por ejemplo, si está dispuesto a cerrar con gracia un exprimir aplicación A diferencia del script de línea de comandos, la aplicación express sigue ejecutándose infinitamente, esperando nuevas solicitudes. process.exit() será una mala opción aquí porque va a interrumpir todas las solicitudes que están en proceso. Y algunos de ellos podrían ser no idempotentes (ACTUALIZAR, ELIMINAR). El cliente nunca sabrá si esas solicitudes se completan 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 las pendientes terminen 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, consulte el Caso 1.

Caso 3 - Error interno

Siempre es mejor throw un error, obtendrás un rastro de pila y un mensaje de error muy bien formateados. Los niveles superiores de código siempre pueden decidir si pueden manejar el error (catch) o deja que se bloquee el proceso. Por otro lado, process.exit(1) terminará el proceso en silencio y no habrá posibilidad de recuperarse de esto. Puede ser el único "beneficio" de process.exit(), puede estar seguro de que el proceso finalizará.


55
2018-02-06 17:38



REPL(Línea de comando)

  • prensa ctrl + c  dos veces

  • Tipo .exit y presione enter

Archivo de comandos

process.exit(code)

El nodo normalmente sale con código 0 cuando ya no hay más operaciones asíncronas pendientes.

process.exit(1) debería usarse para salir con un código de falla. Esto nos permitirá inferir que el nodo no se cerró con gracia y se vio forzado a cerrarse.

Hay otros códigos de salida como

3 - Error interno de Parse de JavaScript (muy, muy raro)

5 - Error fatal en el motor javascript v8

9 - argumento inválido

Para ver la lista completa, consulte códigos de salida del nodo


22
2018-02-09 05:36



Tengo una aplicación que quería:

  1. Enviar un correo electrónico al usuario
  2. Salir con un código de error

Tuve que enganchar process.exit(code) a una exit controlador de eventos, de lo contrario el correo no se enviará desde la llamada process.exit(code) mata 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); });

12
2017-12-06 01:15



Del código que puedes usar process.exit([errorcode]) dónde [errorcode] es un número entero opcional (0 es el predeterminado para indicar el éxito).

Si estás usando el Lea Eval Print Loop (REPL), puedes usar Ctrl + reo tipo .exit

Alternativamente, en Windows o Linux puede usar Ctrl + do, Ctrl + do

En Mac, el comando es Ctrl + Z, Ctrl + Z


6
2018-06-10 01:05



Como @Dominic señaló, lanzando un error no capturado es una mejor práctica en lugar de llamar process.exit ([código]):
process.exitCode = 1; throw new Error("my module xx condition failed");


6
2017-10-26 20:10