Node.js: proceso

El objeto de proceso es un objeto global y se puede acceder a él desde cualquier lugar. Hay varios métodos disponibles en un objeto de proceso.

Eventos de proceso

El objeto de proceso es una instancia de EventEmitter y emite los siguientes eventos:

No Señor. Descripción del evento
1

exit

Emitido cuando el proceso está a punto de salir. No hay forma de evitar la salida del bucle de eventos en este punto, y una vez que todos los escuchas de salida hayan terminado de ejecutarse, el proceso se cerrará.

2

beforeExit

Este evento se emite cuando el nodo vacía su ciclo de eventos y no tiene nada más que programar. Normalmente, el nodo sale cuando no hay trabajo programado, pero un oyente de "beforeSalir" puede realizar llamadas asincrónicas y hacer que el nodo continúe.

3

uncaughtException

Emitido cuando una excepción burbujea hasta el bucle de eventos. Si se agrega un oyente para esta excepción, la acción predeterminada (que es imprimir un seguimiento de pila y salir) no ocurrirá.

4

Signal Events

Emitido cuando los procesos reciben una señal como SIGINT, SIGHUP, etc.

Ejemplo

Cree un archivo js llamado main.js con el siguiente código para escuchar exit evento -

process.on('exit', function(code) {
   // Following code will never execute.
   setTimeout(function() {
      console.log("This will not run");
   }, 0);
  
   console.log('About to exit with code:', code);
});
console.log("Program Ended");

Ahora ejecute main.js para ver el resultado:

$ node main.js

Verifique la salida.

Program Ended
About to exit with code: 0

Códigos de salida

El nodo normalmente sale con un código de estado 0 cuando no hay más operaciones asíncronas pendientes. Hay otros códigos de salida que se describen a continuación:

Código Nombre y descripción
1

Uncaught Fatal Exception

Hubo una excepción no detectada y no fue manejada por un dominio o un controlador de eventos uncaughtException.

2

Unused

reservado por Bash para uso indebido integrado.

3

Internal JavaScript Parse Error

El código fuente de JavaScript interno en el proceso de arranque de Node provocó un error de análisis. Esto es extremadamente raro y, por lo general, solo puede suceder durante el desarrollo de Node.

4

Internal JavaScript Evaluation Failure

El código fuente de JavaScript interno en el proceso de arranque de Node no pudo devolver un valor de función cuando se evaluó. Esto es extremadamente raro y, por lo general, solo puede suceder durante el desarrollo de Node.

5

Fatal Error

Hubo un error irrecuperable fatal en V8. Normalmente, se imprimirá un mensaje en stderr con el prefijo FATAL ERROR.

6

Non-function Internal Exception Handler

Hubo una excepción no detectada, pero la función interna del controlador de excepciones fatales se estableció de alguna manera en una no función y no se pudo llamar.

7

Internal Exception Handler Run-Time Failure

Hubo una excepción no detectada y la función interna del controlador de excepciones fatales arrojó un error al intentar manejarla.

8

Unused

9

Invalid Argument

Se especificó una opción desconocida o se proporcionó una opción que requería un valor sin un valor.

10

Internal JavaScript Run-Time Failure

El código fuente de JavaScript interno en el proceso de arranque de Node arrojó un error cuando se llamó a la función de arranque. Esto es extremadamente raro y, por lo general, solo puede suceder durante el desarrollo de Node.

11

Invalid Debug Argument

Se establecieron las opciones --debug y / o --debug-brk, pero se eligió un número de puerto no válido.

12

Signal Exits

Si Node recibe una señal fatal como SIGKILL o SIGHUP, entonces su código de salida será 128 más el valor del código de señal. Esta es una práctica estándar de Unix, ya que los códigos de salida se definen como enteros de 7 bits y las salidas de señal establecen el bit de orden superior y luego contienen el valor del código de señal.

Propiedades del proceso

El proceso proporciona muchas propiedades útiles para tener un mejor control sobre las interacciones del sistema.

No Señor. Descripción de propiedad
1

stdout

Una secuencia de escritura para stdout.

2

stderr

Una secuencia de escritura a stderr.

3

stdin

Un flujo de escritura a stdin.

4

argv

Una matriz que contiene los argumentos de la línea de comandos. El primer elemento será 'nodo', el segundo elemento será el nombre del archivo JavaScript. Los siguientes elementos serán cualquier argumento adicional de la línea de comandos.

5

execPath

Este es el nombre de ruta absoluto del ejecutable que inició el proceso.

6

execArgv

Este es el conjunto de opciones de línea de comando específicas del nodo del ejecutable que inició el proceso.

7

env

Un objeto que contiene el entorno del usuario.

8

exitCode

Un número que será el código de salida del proceso, cuando el proceso finaliza con elegancia o se sale a través de process.exit () sin especificar un código.

9

version

Una propiedad compilada que expone NODE_VERSION.

10

versions

Una propiedad que expone las cadenas de versión del nodo y sus dependencias.

11

config

Un objeto que contiene la representación de JavaScript de las opciones de configuración que se utilizaron para compilar el ejecutable del nodo actual. Es el mismo que el archivo "config.gypi" que se generó al ejecutar el script ./configure.

12

pid

El PID del proceso.

13

title

Getter / setter para establecer lo que se muestra en 'ps'.

14

arch

En qué arquitectura de procesador está ejecutando: 'arm', 'ia32' o 'x64'.

15

platform

En qué plataforma estás ejecutando: 'darwin', 'freebsd', 'linux', 'sunos' o 'win32'

dieciséis

mainModule

Forma alternativa de recuperar require.main. La diferencia es que si el módulo principal cambia en tiempo de ejecución, require.main aún podría referirse al módulo principal original en los módulos que eran necesarios antes de que ocurriera el cambio. Generalmente, es seguro asumir que los dos se refieren al mismo módulo.

Ejemplo

Cree un archivo js llamado main.js con el siguiente código:

// Printing to console
process.stdout.write("Hello World!" + "\n");

// Reading passed parameter
process.argv.forEach(function(val, index, array) {
   console.log(index + ': ' + val);
});

// Getting executable path
console.log(process.execPath);

// Platform Information 
console.log(process.platform);

Ahora ejecute main.js para ver el resultado:

$ node main.js

Verifique la salida mientras ejecuta su programa en una máquina Linux -

Hello World!
0: node
1: /web/com/1427106219_25089/main.js
/usr/bin/node
linux

Referencia de métodos

El proceso proporciona muchos métodos útiles para tener un mejor control sobre las interacciones del sistema.

No Señor Método y descripción
1

abort()

Hace que el nodo emita un aborto. Hace que el nodo salga y genere un archivo principal.

2

chdir(directory)

Cambia el directorio de trabajo actual del proceso o genera una excepción si falla.

3

cwd()

Devuelve el directorio de trabajo actual del proceso.

4

exit([code])

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

5

getgid()

Obtiene la identidad de grupo del proceso. Este es el ID de grupo numérico, no el nombre del grupo. Esta función está disponible solo en plataformas POSIX (es decir, no Windows, Android).

6

setgid(id)

Establece la identidad de grupo del proceso. (Ver setgid (2)). Acepta un ID numérico o una cadena de nombre de grupo. Si se especifica un nombre de grupo, este método se bloquea mientras se resuelve en un ID numérico. Esta función solo está disponible en plataformas POSIX (es decir, no Windows, Android).

7

getuid()

Obtiene la identidad de usuario del proceso. Esta es la identificación numérica, no el nombre de usuario. Esta función solo está disponible en plataformas POSIX (es decir, no Windows, Android).

8

setuid(id)

Establece la identidad de usuario del proceso (Ver setgid (2)). Acepta una identificación numérica o una cadena de nombre de usuario. Si se especifica un nombre de usuario, este método se bloquea mientras se resuelve en un ID numérico. Esta función solo está disponible en plataformas POSIX (es decir, no Windows, Android).

9

getgroups()

Devuelve una matriz con los ID de grupo complementarios. POSIX lo deja sin especificar si se incluye el ID de grupo efectivo, pero node.js asegura que siempre lo esté. Esta función está disponible solo en plataformas POSIX (es decir, no Windows, Android).

10

setgroups(groups)

Establece los ID de grupo suplementarios. Esta es una operación privilegiada, lo que implica que debe estar en la raíz o tener la capacidad CAP_SETGID. Esta función está disponible solo en plataformas POSIX (es decir, no Windows, Android).

11

initgroups(user, extra_group)

Lee / etc / group e inicializa la lista de acceso de grupos, utilizando todos los grupos de los que el usuario es miembro. Esta es una operación privilegiada, lo que implica que debe estar en la raíz o tener la capacidad CAP_SETGID. Esta función solo está disponible en plataformas POSIX (es decir, no Windows, Android).

12

kill(pid[, signal])

Envía una señal a un proceso. pid es la identificación del proceso y la señal es la cadena que describe la señal a enviar. Los nombres de las señales son cadenas como 'SIGINT' o 'SIGHUP'. Si se omite, la señal será 'SIGTERM'.

13

memoryUsage()

Devuelve un objeto que describe el uso de memoria del proceso Node medido en bytes.

14

nextTick(callback)

Una vez que el ciclo de eventos actual se haya completado, llame a la función de devolución de llamada.

15

umask([mask])

Establece o lee la máscara de creación del modo de archivo del proceso. Los procesos secundarios heredan la máscara del proceso principal. Devuelve la máscara antigua si se proporciona el argumento de máscara; de lo contrario, devuelve la máscara actual.

dieciséis

uptime()

Número de segundos que el nodo se ha estado ejecutando.

17

hrtime()

Devuelve el tiempo real de alta resolución actual en una matriz de tuplas de [segundos, nanosegundos]. Es relativo a un tiempo arbitrario en el pasado. No está relacionado con la hora del día y, por lo tanto, no está sujeto a la deriva del reloj. El uso principal es para medir el rendimiento entre intervalos.

Ejemplo

Cree un archivo js llamado main.js con el siguiente código:

// Print the current directory
console.log('Current directory: ' + process.cwd());

// Print the process version
console.log('Current version: ' + process.version);

// Print the memory usage
console.log(process.memoryUsage());

Ahora ejecute main.js para ver el resultado:

$ node main.js

Verifique la salida mientras ejecuta su programa en una máquina Linux -

Current directory: /web/com/1427106219_25089
Current version: v0.10.33
{ rss: 11505664, heapTotal: 4083456, heapUsed: 2157704 }