मैंने वास्तव में कभी नहीं सोचा है कि शेल वास्तव में पाइपेड कमांड को कैसे निष्पादित करता है। मैं हमेशा से कहा गया है कि "एक कार्यक्रम के stdout हो जाता पहुंचाया दूसरे के stdin में," पाइप के बारे में सोच का एक तरीका के रूप में। तो स्वाभाविक रूप से, मैंने सोचा था कि कहने के मामले में, ए | बी, ए पहले चलता था, फिर बी ए का स्टैडआउट मिलता है, और ए के स्टडआउट को इसके इनपुट के रूप में उपयोग करता है।
लेकिन मैंने देखा है कि जब लोग ps में किसी विशेष प्रक्रिया को खोजते हैं, तो वे grep -v "grep" को कमांड के अंत में यह सुनिश्चित करने के लिए शामिल करेंगे कि grep अंतिम आउटपुट में प्रकट न हो। इसका मतलब है कि कमांड में ps aux | grep "बैश" | 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