Canalización (Unix)


En los sistemas operativos de computadoras similares a Unix , una tubería es un mecanismo para la comunicación entre procesos mediante el paso de mensajes. Una canalización es un conjunto de procesos encadenados entre sí por sus flujos estándar , de modo que el texto de salida de cada proceso ( stdout ) se pasa directamente como entrada ( stdin ) al siguiente. El segundo proceso se inicia cuando el primer proceso aún se está ejecutando y se ejecutan al mismo tiempo . El concepto de tuberías fue defendido por Douglas McIlroy en el hogar ancestral de Bell Labs en Unix ., durante el desarrollo de Unix, dando forma a su filosofía de caja de herramientas . [1] [2] Se denomina por analogía a una tubería física . Una característica clave de estos oleoductos es su "ocultación de elementos internos" (Ritchie y Thompson, 1974). Esto, a su vez, permite una mayor claridad y simplicidad en el sistema.

Este artículo trata sobre conductos anónimos , donde los datos escritos por un proceso son almacenados en búfer por el sistema operativo hasta que son leídos por el siguiente proceso, y este canal unidireccional desaparece cuando se completan los procesos. Esto difiere de las canalizaciones con nombre , donde los mensajes se pasan hacia o desde una canalización que se nombra convirtiéndolo en un archivo, y permanece después de que se completan los procesos. La sintaxis estándar de shell para conductos anónimos es enumerar varios comandos, separados por barras verticales ("conductos" en la jerga común de Unix):

Por ejemplo, para listar archivos en el directorio actual ( ls ), retener solo las líneas de salida de ls que contienen la cadena "clave" ( grep ) y ver el resultado en una página de desplazamiento ( menos ), un usuario escribe lo siguiente en el línea de comando de una terminal:

El comando ls -lse ejecuta como un proceso, cuya salida (stdout) se canaliza a la entrada (stdin) del proceso para grep key; y lo mismo para el proceso de less. Cada proceso toma información del proceso anterior y produce salida para el siguiente proceso a través de flujos estándar . Cada uno |le dice al shell que conecte la salida estándar del comando de la izquierda a la entrada estándar del comando de la derecha mediante un mecanismo de comunicación entre procesos llamado tubería (anónima) , implementado en el sistema operativo. Las tuberías son unidireccionales; los datos fluyen a través de la tubería de izquierda a derecha.

A continuación se muestra un ejemplo de una canalización que implementa una especie de corrector ortográfico para el recurso web indicado por una URL . A continuación se ofrece una explicación de lo que hace.

Todos los shells de Unix ampliamente utilizados tienen una construcción de sintaxis especial para la creación de pipelines. En todo el uso de uno escribe los comandos de forma secuencial, separada por el ASCII barra vertical personaje |(que, por esta razón, a menudo se llama "carácter"). El shell inicia los procesos y organiza las conexiones necesarias entre sus flujos estándar (incluida cierta cantidad de almacenamiento en búfer ).


Una canalización de tres procesos de programa que se ejecutan en una terminal de texto