Saya tidak pernah benar-benar berpikir tentang bagaimana shell benar-benar menjalankan perintah pipa. Saya selalu diberitahu bahwa "stdout dari satu program akan disalurkan ke stdin yang lain," sebagai cara berpikir tentang pipa. Jadi secara alami, saya berpikir bahwa dalam kasus katakanlah, A | B, A akan berjalan lebih dulu, kemudian B mendapat stdout dari A, dan menggunakan stdout dari A sebagai inputnya.
Tetapi saya perhatikan bahwa ketika orang mencari proses tertentu dalam ps, mereka akan menyertakan grep -v "grep" di akhir perintah untuk memastikan bahwa grep tidak muncul di hasil akhir. Ini berarti bahwa dalam perintah ps aux | grep "bash" | grep -v "grep", yang berarti bahwa ps tahu bahwa grep sedang berjalan dan oleh karena itu dalam output dari ps. Tetapi jika ps selesai berjalan sebelum outputnya disalurkan ke grep, bagaimana ia tahu bahwa grep berjalan?
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