pipe – ¿En qué orden se ejecutan los comandos canalizados?

Pregunta:

Realmente nunca pensé en cómo el shell ejecuta realmente los comandos canalizados. Siempre me han dicho que "el stdout de un programa se canaliza al stdin de otro", como una forma de pensar en las canalizaciones. Entonces, naturalmente, pensé que en el caso de, digamos, A | B , A se ejecutaría primero, luego B obtiene la salida estándar de A y usa la salida estándar de A como entrada.

Pero he notado que cuando las personas buscan un proceso en particular en ps , incluirían grep -v "grep" al final del comando para asegurarse de que grep no aparezca en el resultado final.
Esto significa que en el comando ps aux | grep "bash" | grep -v "grep" se da a entender que ps sabía que grep estaba ejecutando y, por lo tanto, está en la salida de ps . Pero si ps termina de ejecutarse antes de que su salida se canalice a grep , ¿cómo supo que grep estaba ejecutando?

flamingtoast@FTOAST-UBUNTU: ~$ ps | grep ".*"
PID TTY          TIME CMD
3773 pts/0    00:00:00 bash
3784 pts/0    00:00:00 ps
3785 pts/0    00:00:00 grep

Respuesta:

Los comandos canalizados se ejecutan al mismo tiempo. Cuando ejecuta ps | grep … , es la suerte del sorteo (o una cuestión de detalles del funcionamiento del shell combinado con el ajuste fino del programador en las entrañas del kernel) si ps o grep comienzan primero, y en cualquier caso continúan para ejecutar al mismo tiempo.

Esto se usa muy comúnmente para permitir que el segundo programa procese los datos a medida que salen del primer programa, antes de que el primer programa haya completado su operación. Por ejemplo

grep pattern very-large-file | tr a-z A-Z

comienza a mostrar las líneas coincidentes en mayúsculas incluso antes de que grep haya terminado de atravesar el archivo grande.

grep pattern very-large-file | head -n 1

muestra la primera línea coincidente y puede detener el procesamiento mucho antes de que grep haya terminado de leer su archivo de entrada.

Si lee en alguna parte que los programas canalizados se ejecutan en secuencia, huya de este documento. Los programas canalizados se ejecutan al mismo tiempo y siempre lo han hecho.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım