¿Cuál es el comando que se usa para salir? (es decir, finalizar el proceso Node.js)
¿Cuál es el comando que se usa para salir? (es decir, finalizar el proceso Node.js)
Respuestas:
Llame al método process
del objeto global exit
:
process.exit()
proceso.exit ([código])
Finaliza el proceso con el 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
.
exit
no es engañoso en absoluto. Estás confundido acerca de cómo funciona Node. Piense en Node como el servidor en sí. No solo se activa según sea necesario, como PHP está dentro de un servidor web como Apache. ¡Node ni siquiera tiene que tener nada que ver con los servidores web! Es solo un host para algunos JavaScript, con algunas geniales bibliotecas integradas para hacer cosas útiles.
mod_php
ni usar Apache. Puede volver a implementar un httpd en PHP como lo hace el nodo si realmente desea o utilizar un enfoque más sensato / estandarizado como FastCGI tal como puede hacerlo en el nodo.
process.exit()
se no se recomienda , como se describe en esta respuesta a continuación .
Solo una nota de que el uso noprocess.exit([number])
es una práctica recomendada .
Las llamadas
process.exit()
obligarán 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 haciaprocess.stdout
yprocess.stderr
.En la mayoría de las situaciones, no es realmente necesario llamar
process.exit()
explícitamente. El proceso Node.js se cerrará solo si no hay trabajo adicional pendiente en el bucle de eventos. Laprocess.exitCode
propiedad se puede configurar para decirle al proceso qué código de salida usar cuando el proceso finalice correctamente.Por ejemplo, el siguiente ejemplo ilustra un mal uso del
process.exit()
método que podría llevar a que los datos impresosstdout
se truncaran y perdieran:// 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
process.stdout
en Node.js a veces son asíncronas y pueden ocurrir en múltiples ticks del bucle de eventos Node.js.process.exit()
Sin embargo, la llamada obliga al proceso a salir antes de questdout
se puedan realizar esas escrituras adicionales .En lugar de llamar
process.exit()
directamente, el código debe establecerprocess.exitCode
y permitir que el proceso salga 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; }
process.exit()
está destinado.
De la documentación oficial de nodejs.org :
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);
code = 0; process.exit(code);
code
?
process.exit()
sin parámetros ya que el código predeterminado es 0
process.exit(0);
y lo ejecuta node exit_0.js && echo 'success'
, dirá "éxito". Si crea exit_1.js con process.exit(1);
y lo ejecuta node exit_1.js && echo 'success'
, no dirá "éxito" ya que su proceso salió con un valor distinto de cero (que indica un "error" o "salida anormal" al shell). Además, verá diferentes valores $?
si ejecuta node exit_1.js
vs node exit_0.js
(puede verificar haciendo node exit_1.js
y luego haciendo echo $?
).
Si está en un terminal Unix o en la línea de comandos de Windows y desea salir del Node REPL, ...
.exit
y presione Entrar, onode
REPL, Ctrl + D para salir es un comportamiento estándar, por lo que también funciona en Windows.
Desde la línea de comandos, .exit
es lo que quieres:
$ node
> .exit
$
Está documentado en los documentos REPL . REPL (Read-Eval-Print-Loop) es lo que se llama la línea de comando Node.
Desde un programa normal, use process.exit([code])
.
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 las llamadas
process.exit()
obligarán al proceso a salir lo más rápido 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 haciaprocess.stdout
yprocess.stderr
.En la mayoría de las situaciones, en realidad no es necesario llamar
process.exit()
explícitamente. El proceso Node.js se cerrará solo si no hay trabajo adicional pendiente en el bucle de eventos. Laprocess.exitCode
propiedad se puede configurar para decirle al proceso qué código de salida usar cuando el proceso finalice correctamente.
Cubramos las posibles razones por las que podría estar dispuesto a salir del proceso node.js y por qué debería evitar process.exit()
:
Si el script ha llegado a su fin y el intérprete de nodo no sale, indica que algunas operaciones asíncronas aún están pendientes. Es incorrecto forzar la finalización del proceso process.exit()
en este momento. Es mejor tratar de entender qué impide que su script 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 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 pueden ser no idempotentes (ACTUALIZAR, ELIMINAR). El cliente nunca sabrá si esas solicitudes se han completado 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, vea el Caso 1.
Siempre es mejor throw
un error, obtendrá un seguimiento de pila y un mensaje de error bien formateados. 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)
finalizará 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á.
Process.exit()
parece una exageración importante para la mayoría de las aplicaciones. Estaba buscando un equivalente a la función die () de php ... más como:throw new Error('die msg')
REPL (línea de comando)
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 asíncronas 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 se vio obligado a cerrar.
Hay otros códigos de salida como
3 - Error interno de análisis de JavaScript (muy, muy raro)
5 - Error grave en el motor v8 javascript
9 - Argumento inválido
Para la lista completa, vea los códigos de salida de nodo
Tengo una aplicación que quería:
Tuve que conectarme process.exit(code)
a un exit
controlador de eventos, o de lo contrario el correo no se enviará ya que llamar process.exit(code)
directamente mata 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); });
process.exitCode
trabajar para mí en una herramienta de línea de comandos que estoy construyendo (probado en el Nodo v4.3.0). Pero no pude hacer que se comportara como está documentado. Esto podría haber sido un caso extremo commander
, aunque github.com/tj/commander.js/… me hace preguntarme. No estoy seguro de si alguien más ha visto este problema con el Nodo 4, pero documenta por si acaso para futuras referencias.
process.exitCode = 1
, el proceso sale con el código 0.
Como señaló @Dominic, lanzar un error no detectado es una mejor práctica en lugar de llamar a process.exit ([código]) :
process.exitCode = 1;
throw new Error("my module xx condition failed");
Salir
let exitCode = 1;
process.exit(exitCode)
Códigos de salida útiles
1 - Catchall para errores generales 2 - Uso indebido de los componentes integrados de shell (de acuerdo con la documentación de Bash) 126 - El comando invocado no puede ejecutarse 127 - "comando no encontrado" 128 - Argumento no válido para salir 128 + n - Señal de error fatal "n" 130 - Script terminado por Control-C 255 \ * - Estado de salida fuera de rango
Desde el código puede usar process.exit([errorcode])
where [errorcode]
es un número entero opcional ( 0
es el valor predeterminado para indicar el éxito).
Si usa el bucle de lectura, evaluación, impresión (REPL) , puede usar Ctrl+ Do escribir.exit
Alternativamente, en Windows o Linux puede usar Ctrl+ C, Ctrl+C
En Mac, el comando es Ctrl+ Z, Ctrl+Z
node --version
v0.10.18
Presione Ctrl + C
dos veces o .exit
.
>
(To exit, press ^C again or type .exit)
>
Pude hacer que todos mis procesos de nodo se mueran directamente desde el shell 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 -
y //
trabajar en este contexto. ¡Espero que esto ayude!
Como el proceso es un objeto global, no necesita importar ningún módulo. La siguiente función sale o mata el proceso del nodo actual.
proceso.exit (código)
process.kill (process.pid)
process.abort ()
Abra el 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 del código,
process.exit(); // graceful termination
process.exit(1); // non graceful termination
si desea salir de la aplicación del nodo js, escriba
process.exit(1)
en tu código
Si desea forzar el ciclo de ejecución para detener el proceso, puede utilizar 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 no se han realizado operaciones asincrónicas.
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 una 'falla'.
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 "Finalizar proceso".
Puede usar la función process.exit ([código]) .
Si desea salir sin una 'falla', use el código 0
:
process.exit(0);
Para salir con un código de 'falla' 1
puede ejecutar:
process.exit(1);
El código de 'falla' de la falla es específico de la aplicación. Entonces puede usar sus propias convenciones para ello.
end()
. De lo contrario, simplemente se colgará.