Sustitución de procesos


En informática, la sustitución de procesos es una forma de comunicación entre procesos que permite que la entrada o salida de un comando aparezca como un archivo. El comando se sustituye en línea, donde normalmente aparecería un nombre de archivo, por el shell de comandos . Esto permite que los programas que normalmente solo aceptan archivos lean o escriban directamente en otro programa.

La sustitución de procesos estaba disponible como una opción en tiempo de compilación para ksh88la versión de 1988 de KornShell de Bell Labs . [1] El shell rc proporciona la función como "ramificación de canalización" en la versión 10 de Unix , lanzada en 1990. [2] El shell Bash proporcionó la sustitución de procesos a más tardar en la versión 1.14, lanzada en 1994. [3]

El comando diff de Unix normalmente acepta los nombres de dos archivos para comparar, o un nombre de archivo y entrada estándar. La sustitución de procesos permite comparar la salida de dos programas directamente:

La sustitución de procesos también se puede utilizar para capturar la salida que normalmente iría a un archivo y redirigirla a la entrada de un proceso. La sintaxis de Bash para escribir en un proceso es >(command). Aquí hay un ejemplo usando los comandos tee, wcy gzipque cuenta las líneas en un archivo wc -ly las comprime gzipen una sola pasada:

Bajo el capó, la sustitución de procesos tiene dos implementaciones. En los sistemas que admiten /dev/fd(la mayoría de los sistemas similares a Unix), funciona llamando a la llamada al pipe()sistema, que devuelve un descriptor de archivo $fdpara una nueva tubería anónima, luego crea la cadena /dev/fd/$fdy la sustituye en la línea de comandos. En sistemas sin /dev/fdsoporte, llama mkfifocon un nuevo nombre de archivo temporal para crear una tubería con nombre y sustituye este nombre de archivo en la línea de comando. Para ilustrar los pasos involucrados, considere la siguiente sustitución de comando simple en un sistema con /dev/fdsoporte:

Para las canalizaciones con nombre, la ejecución se diferencia únicamente en la creación y eliminación de la canalización; se crean con mkfifo(al que se le asigna un nuevo nombre de archivo temporal) y se eliminan con unlink. Todos los demás aspectos siguen siendo los mismos.