fork()
आदिम अक्सर कल्पना फैला है। जब तक आप इसके लिए एक महसूस नहीं करते हैं, तब तक आपको कागज पर पता लगाना चाहिए कि प्रत्येक ऑपरेशन क्या है और प्रक्रियाओं की संख्या के लिए खाता है। यह मत भूलो कि कांटा () वर्तमान प्रक्रिया की एक निकट-परिपूर्ण प्रतिलिपि बनाता है। सबसे महत्वपूर्ण अंतर (अधिकांश उद्देश्यों के लिए) यह है कि fork()
माता-पिता और बच्चे के बीच वापसी मूल्य भिन्न होता है। (चूंकि यह कोड रिटर्न वैल्यू को नजरअंदाज करता है, इससे कोई फर्क नहीं पड़ता।)
तो, सबसे पहले, एक प्रक्रिया है। यह एक दूसरी प्रक्रिया बनाता है, जिसमें दोनों एक बिंदु और लूप प्रिंट करते हैं। उनकी दूसरी पुनरावृत्ति पर, प्रत्येक एक और प्रतिलिपि बनाता है, इसलिए चार प्रक्रियाएँ एक बिंदु को प्रिंट करती हैं, और फिर बाहर निकलती हैं। तो हम आसानी से छह डॉट्स का हिसाब कर सकते हैं, जैसे आप उम्मीद करते हैं।
हालांकि, printf()
वास्तव में क्या करता है इसका उत्पादन बफर है। तो पहले डॉट जब केवल दो प्रक्रियाएं थीं, जब लिखित नहीं होती हैं। वे डॉट्स बफ़र में रहते हैं - जो कि फोर्क () में डुप्लिकेट है। यह तब तक नहीं है जब तक यह प्रक्रिया बाहर निकलने वाली नहीं है कि बफ़र्ड डॉट दिखाई देता है। चार प्रक्रियाएं एक बफ़र्ड डॉट को प्रिंट करती हैं, साथ ही नया एक 8 डॉट्स देता है।
आपको लगता है कि व्यवहार से बचना चाहते थे, तो फोन fflush(stdout);
के बाद printf()
।