Я ніколи не замислювався над тим, як оболонка насправді виконує трубопровідні команди. Я завжди говорили , що «стандартний висновок однієї програми отримує по трубопроводу в потоці введення інших," як спосіб мислення про трубах. Так природно, я подумав, що у випадку скажімо: A | B, A би запустився спочатку, потім B отримує відтінок A і використовує stdout A як свій вхід.
Але я помітив, що коли люди шукають певний процес у ps, вони включають grep -v "grep" в кінці команди, щоб переконатися, що grep не відображається у кінцевому результаті. Це означає, що в команді ps aux | греп "баш" | grep -v "grep", що означає, що ps знав, що grep працює і тому знаходиться у виході ps. Але якщо ps закінчує працювати до того, як його результат перейде в греп, то як він знав, що grep працює?
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