मैं कांटा पर कुछ सरल कोड देख रहा था, और इसे अपने लिए कोशिश करने का फैसला किया। मैंने संकलित किया और फिर इसे इमाक्स के अंदर से चलाया, और बैश में इसे चलाने से उत्पादित उस आउटपुट में एक अलग आउटपुट मिला।जब मैं अपना आउटपुट पाइप करता हूं तो मेरे फोर्किंग प्रोग्राम का आउटपुट अलग क्यों होता है?
#include <unistd.h>
#include <stdio.h>
int main() {
if (fork() != 0) {
printf("%d: X\n", getpid());
}
if (fork() != 0) {
printf("%d: Y\n", getpid());
}
printf("%d: Z\n", getpid());
}
मैं जीसीसी के साथ संकलित, और उसके बाद Emacs अंदर से a.out भाग गया है, साथ ही cat
, और grep .
को यह पाइप, और इस मिला है।
2055: एक्स
2055: वाई
2055: जेड
2055: एक्स
2058: जेड
2057: वाई
2057: जेड
2059: जेड
यह सही नहीं है। यह सिर्फ बैश से चल रहा है मैं (जो मैं उम्मीद)
2084: एक्स
2084: वाई
2084: जेड
2085: वाई
2085: जेड
2087: जेड
2086: जेड
संपादित करें - कुछ नई पंक्तियां याद
क्या चल रहा है?
आप कुछ भी के माध्यम से परिणाम क्यों पाइप कर रहे हैं (esp। "Cat" जो वास्तव में कुछ भी नहीं करेगा)? - ओह प्रतीक्षा करें यह पाइपिंग है जो विषमता को पेश करता है ... हम्म ... – Pointy
मैं इसे पुन: पेश कर सकता हूं, इसलिए यह ब्रह्मांडीय किरण या कुछ भी नहीं है। पेचीदा। ध्यान दें कि पूर्व आउटपुट में एक पीआईडी (2056) गायब है; शायद यह 'बिल्ली' का पीआईडी है। – Thomas
मैंने इसे कुछ बार चलाया, जिनमें से अधिकांश में पीआईडी गायब नहीं था। – Squidly