Cómo salir en Node.js

En este tutorial, le mostraremos las diversas formas de salir de los programas de Node.js. Primero debe comprender que Node.js funciona en un solo hilo o p...

En este tutorial, le mostraremos las diversas formas de salir de los programas de Node.js. Primero debe comprender que Node.js funciona en un solo hilo o proceso principal. Puede generar procesos secundarios adicionales para manejar el trabajo adicional. Salir del proceso principal nos permite salir de Node.

Si bien hay muchas formas de salir de Node, algunas son mejores que otras para ciertas situaciones, como si está ejecutando un REPL o no. Explicaremos esto con más detalle a lo largo del artículo.

Permitir que un script salga implícitamente

Salir de un programa Node.js iniciado en la línea de comando puede ser tan simple como esperar a que termine de ejecutarse el script. Implícitamente, el proceso de Node.js se cerrará cuando llegue al final del script.

Puede ver esto ejecutando el siguiente scipt:

1
2
3
4
5
6
// batman.js
console.log('Batman begins');

process.on('exit', function(code) {
    return console.log(`About to exit with code ${code}`);
});

Ejecute el programa con el comando node batman.js y verá que emite la primera declaración sobre Batman. Además, se activa la devolución de llamada "exit", lo que da como resultado una impresión del mensaje sobre la salida y un código de salida. Debería ver algo similar a lo siguiente:

1
2
3
$ node batman.js 
Batman begins
About to exit with code 0

Tenga en cuenta que los eventos y bucles pendientes bloquearán la salida del programa. Agregue esta función de repetición al final del script anterior.

1
2
3
4
5
6
7
// batman.js

// ...

setInterval((function() {
    return console.log('I\'m Batman!');
}), 1000);

Ejecutarlo de nuevo. Esta vez, el programa no sale, porque la función setInterval repetitiva bloquea la salida de Node.js. Su salida se verá similar a esto:

1
2
3
4
5
6
$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...

Donde la frase "I'm Batman!" se imprime continuamente hasta que salgas con fuerza, como con Ctrl + C, o cierres tu terminal.

Usando process.exit()

Podemos salir de los programas de Node.js usando la llamada de función process.exit explícita. La función process.exit sale del proceso actual de Node.js. Toma un código de salida, que es un número entero.

El objeto proceso es una variable global que nos permite administrar el proceso actual de Node.js. Dado que es global, podemos acceder a él desde cualquier lugar dentro de un programa Node.js sin usar require para importarlo.

Actualicemos el último programa que no sale debido a la función setInterval. Esta vez, lo obligaremos a salir usando un tiempo de espera después de que hayan transcurrido 5 segundos. Agregue la siguiente función al mismo script 'batman.js' de antes.

1
2
3
4
5
6
7
// batman.js

// ...

setTimeout((function() {
    return process.exit(22);
}), 5000);

Cuando ejecute node batman.js, notará que esta vez, el programa se ejecuta por un tiempo limitado y luego sale con un código de salida de 22.

1
2
3
4
5
6
7
node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
About to exit with code 22

El uso de process.exit funciona para salir de REPL (que veremos más adelante), así como para finalizar la ejecución de programas o scripts de Node.js.

Node.js interpreta los códigos distintos de cero como un error y un código de salida de 0 como un éxito.

Salir de Node.js usando process.kill()

También podemos salir de Node.js usando process.kill para eliminar el proceso de Node.js en ejecución. La diferencia entre esto y process.exit es que process.kill toma el pid, o id del proceso, del proceso que queremos matar, así como una señal opcional que queremos enviar al proceso. Esto significa que podemos enviar señales para matar procesos que no sean el proceso principal de Node.js. Esto es útil en aplicaciones altamente simultáneas con muchos procesos en ejecución.

Para eliminar el proceso del nodo principal, solo pasamos el pid del proceso principal.

Para ver esto en funcionamiento, reemplace la función setTimeout en nuestro ejemplo de código anterior con esta versión que usa process.kill.

1
2
3
4
5
6
7
// batman.js

// ...

setTimeout((function() {
    return process.kill(process.pid);
}), 5000);

El programa sale a tiempo como antes, después de que se impriman algunas de las mismas sentencias. Esta vez, el pid también se imprime en la consola (el suyo puede ser diferente al 15):

1
2
3
4
5
6
7
$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
Terminated: 15

Este método también funciona en los programas REPL y Node.js.

Cómo salir de Node.js usando process.abort

Del mismo modo, podemos usar process.abort para salir de Node.js. Este método funciona en REPL, así como en scripts y aplicaciones.

La diferencia entre process.abort, process.kill y process.exit es que process.abort siempre sale de Node.js inmediatamente y genera un archivo central. Además, no se ejecutarán devoluciones de llamadas de eventos.

Nota: El archivo principal que acabamos de mencionar no se crea si ulimit -c se establece en 0. Consulte este tutorial para obtener más detalles.

Para verlo en acción, reemplace la llamada process.kill en nuestro archivo batman.js con una llamada a process.abort y ejecute node batman.js.

1
2
3
4
5
6
7
// batman.js

// ...

setTimeout((function() {
    return process.abort();
}), 5000);

Cuando ejecuta el programa con node batman.js, el programa imprime las líneas como antes, pero sale después de que se agote el tiempo de espera, imprimiendo información sobre el estado del programa cuando abortó.

1
2
3
4
5
6
7
$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
Abort trap: 6

El REPL

Dado que REEMPLAZAR (Read–eval–print loop) es un tipo diferente de entorno de ejecución de su script típico de Node.js, estas estrategias de salida merecen sus propias secciones especiales. Esto se debe a que REPL es un entorno interactivo y no solo sale implícitamente como lo haría un script.

Como ya hemos mencionado en algunas de las secciones anteriores, algunas de las estrategias anteriores también funcionarán en el REPL. Sin embargo, no es típico usarlos en este caso y, en su lugar, debe usar los siguientes métodos.

Salir usando una combinación de teclas

A diferencia de vim, salir de REPL es realmente simple. En un REPL en ejecución, puede salir usando la combinación de teclas Ctrl + C y tecleándolo dos veces. Este envía el SEGUIR, o señal de interrupción, al REPL. Esto se usa comúnmente para salir de programas en sistemas POSIX.

Usando el comando .exit

También podemos salir de un REPL de Node.js usando el comando ".exit". Cuando ingresa esto en un Nodo REPL en ejecución, el REPL actual saldrá. Esta invocación funciona de manera similar al método Ctrl + C discutido anteriormente.

Conclusión

En muchos casos, usar process.exit será suficiente para salir de Node.js. Sin embargo, como vimos, existen numerosas alternativas. Los diversos métodos le brindan flexibilidad para salir de cualquier lugar en particular en su código. Sin embargo, debe tener cuidado con este poder adicional para no insertar código peligroso que pueda resultar en salidas no planificadas, bloqueando sus programas. as.