Procesos hijo

Clase 15 de 31Curso de Fundamentos de Node.js

Resumen

¿Cómo ejecutar procesos en Node.js?

Node.js no solo permite ejecutar sus propios procesos, sino que también nos capacita para ejecutar otros procesos del sistema. Esto es útil en diversos casos prácticos, como cuando necesitamos interactuar con comandos del sistema operativo o trabajar con scripts externos. Descubrir cómo hacerlo amplía considerablemente nuestras posibilidades para el desarrollo con Node.js.

¿Qué es un proceso en sistema?

Un proceso es una instancia de un programa que se está ejecutando. Por ejemplo, cada vez que ejecutamos un comando en la terminal, se crea un nuevo proceso para ejecutar dicho comando.

Ejemplo de ejecución de un procedimiento:

const { exec } = require('child_process');

exec('ls -la', (error, stdout, stderr) => {
  if (error) {
    console.error(`Error ejecutando el comando: ${error.message}`);
    return;
  }
  if (stderr) {
    console.error(`Error en la ejecución: ${stderr}`);
    return;
  }
  console.log(`Salida del comando: ${stdout}`);
});

En este ejemplo, estamos ejecutando el comando ls -la que en sistemas basados en Unix lista los archivos en un directorio. Para sistemas Windows, usamos dir.

¿Cómo gestionar la ejecución y finalización de procesos?

Estar atento a los eventos durante la ejecución de un proceso es crucial para gestionar correctamente el flujo. Node.js facilita la manipulación de procesos a través del módulo child_process.

Manipulación de procesos mediante Spawn:

const { spawn } = require('child_process');

let proceso = spawn('ls', ['-la']);

proceso.stdout.on('data', (data) => {
  console.log(`Salida: ${data}`);
});

proceso.stderr.on('data', (data) => {
  console.error(`Error: ${data}`);
});

proceso.on('close', (code) => {
  console.log(`El proceso terminó con el código ${code}`);
});

Con spawn, podemos ejecutar comandos y manipular la entrada y salida de datos de un proceso hijo.

¿Qué más podemos hacer con procesos en Node.js?

Node.js se destaca por su capacidad de gestión de eventos, lo cual permite aprovechar al máximo la ejecución de procesos:

  • Detección de eventos: Podemos escuchar distintos eventos en el proceso como exit y close para manejar situaciones cuando el proceso finaliza.
  • Ejecutar scripts o lenguajes externos: Si dispones de una solución en otro lenguaje, como Python, puedes integrarla mediante Node.js directamente sin necesidad de migrar todo el código.

Capturando eventos de finalización del proceso:

proceso.on('exit', (code) => {
  console.log(`Proceso finalizó con código: ${code}`);
});
proceso.on('close', (code) => {
  console.log('Evento close detectado');
});

En resumen, Node.js no solo nos ofrece la herramienta para ejecutar procesos sencillos, sino también para gestionar y optimizar procesos complejos interactuando con el sistema. La versatilidad de child_process nos invita a explorar e integrar procesos de diferentes maneras para mejorar nuestras aplicaciones. ¡Adentrándote más en estas herramientas, podrás potenciar tu flujo de trabajo y dar rienda suelta a las posibilidades en Node.js!