कुछ कार्यक्रम तुरंत शेल में वापस क्यों आते हैं जबकि अन्य तब तक नहीं होते जब तक निष्पादन पूरा नहीं हो जाता?


13

मैंने मॉडर्न ऑपरेटिंग सिस्टम बुक से पढ़ा है कि जब कोई कमांड चलाया जाता है, तो शेल एक चाइल्ड प्रोसेस बनाता है, तब तक उसका इंतजार करता है जब तक कि बच्चे ने एक्जीक्यूशन खत्म नहीं कर लिया और फिर यूजर से दूसरे कमांड का इंतजार करता है। यह वास्तव में जैसे कई कार्यक्रमों के लिए मामला है gedit। जब तक मैंने बंद नहीं किया है तब तक टर्मिनल कमांड नहीं लेता है gedit। हालाँकि जब मैं एटम कोड संपादक खोलता हूं , तो शेल तुरंत वापस आ जाता है, संपादक के चलने के साथ ही अगली कमांड को भी स्वीकार करने के लिए तैयार है। टर्मिनल बंद करने से परमाणु बंद नहीं होता है। क्या इसका मतलब यह है कि संपादक ने बाल प्रक्रिया के रूप में नहीं खोला? अंतर्निहित तंत्र क्या है जो इसे संभव बनाता है?

रनिंग ps au | grep atomदेता है

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom

1
परमाणु संपादक शुरू करने के बाद, क्या आप ps au | grep atomटर्मिनल में दौड़ सकते हैं और अपने प्रश्न में आउटपुट जोड़ सकते हैं?
kirill-a

@ kirill-a ने प्रश्न को अपडेट किया है।
अश्विन PJ

जवाबों:


18

प्रश्न दो प्रकार के कार्यक्रमों के बारे में पूछता है:

  1. प्रोग्राम जो शेल में उपयोगकर्ता के साथ बातचीत करते हैं, और
  2. प्रोग्राम जो शेल में उपयोगकर्ता के साथ बातचीत नहीं करते हैं।

पहले मामले में, शेल में उपयोगकर्ता के साथ बातचीत करने वाले प्रोग्राम शेल पर नियंत्रण वापस करने से पहले पूरा करने के लिए चलाने के लिए डिज़ाइन किए गए हैं। कुछ खास नहीं किया।

दूसरा मामला अधिक जटिल है। आमतौर पर कार्यक्रम फोर्क (मेमोरी में खुद की एक प्रति बनाने), और शेल के कंट्रोलिंग टर्मिनल के साथ अपने जुड़ाव को हटाने की व्यवस्था करता है , और एक अन्य प्रोग्राम को निष्पादित कर सकता है - जो मूल शेल के स्वतंत्र रूप से चलता है। आप दूसरे कार्यक्रम के संदेश देख सकते हैं, लेकिन यह आमतौर पर आपके साथ बातचीत नहीं करता है। यह कैसे उपयोग किया जाता है पर निर्भर करता है, आपके पास हो सकता है

  • एक डेमन (सर्वर) प्रक्रिया, या
  • कार्यक्रम एक नई विंडो में चल सकता है। चित्रमय संपादक बाद में करते हैं।

आगे की पढाई:


टर्मिनल से फोर्किंग और डिसाइड करने के बारे में हिस्सा अक्सर daemonलाइब्रेरी फ़ंक्शन को कॉल करके किया जाता है जो यह सब करता है।
कास्परड

एक नियंत्रित टर्मिनल प्राप्त करने से बचने के लिए, डबल कांटा का उपयोग किया जाता है
jfs

दोनों टिप्पणियों के लिए: फ़ंक्शन POSIX में नहीं है, और मुझे टर्मिनलों को नियंत्रित करने के बारे में पता है, लेकिन उत्तर को छोटा और सरल रखा। मैंने 1980 के दशक के उत्तरार्ध से दोहरे कांटे का उपयोग किया है।
थॉमस डिके
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.