2010-08-31 24 views
9

मुझे पता है कि पृष्ठभूमि में ज्यादातर डेमन्स चलते हैं यानी उन्हें उपयोगकर्ता से बहुत कम बातचीत की आवश्यकता होती है।डेमॉन और सामान्य प्रक्रिया के बीच व्यवहार अंतर क्या हैं?

Wikipedia lists डेमॉन की है जो आम तौर मौजूद हैं:

  • को नियंत्रित करने tty
  • से अलग कर एक सत्र नेता
  • एक प्रक्रिया समूह नेता
  • forking द्वारा पृष्ठभूमि में रहकर बनना बनना और बाहर निकलना (एक या दो बार)। प्रक्रिया के लिए कभी-कभी सत्र नेता बनने की आवश्यकता होती है। यह माता-पिता की प्रक्रिया को सामान्य निष्पादन जारी रखने की अनुमति भी देता है। इस मुहावरे को कभी-कभी वाक्यांश "फोर्क ऑफ एंड डाई" वाक्यांश के साथ सारांशित किया जाता है
  • वर्तमान निर्देशिका निर्देशिका के रूप में रूट निर्देशिका ("/") को सेट करना ताकि प्रक्रिया किसी भी निर्देशिका को किसी भी निर्देशिका में रखे जो कि आरोहित फ़ाइल सिस्टम पर हो (इसे अनमाउंट किया जा सकता है)।
  • खुले(), creat(), et al को अनुमति देने के लिए उमास्क को 0 में बदलना। कॉलर
  • निष्पादन के समय सभी विरासत वाली खुली फ़ाइलों को बंद करने के लिए कॉलर के umask पर निर्भर न करने के लिए कॉल करें, फाइल डिस्क्रिप्टर 0, 1 और 2 (stdin, stdout, stderr)। आवश्यक फाइलें बाद में खोली जाएंगी।
  • एक लॉगफ़ाइल, कंसोल, या/dev/stdin, stdout के रूप में अशक्त, और stderr का उपयोग

मैं के रूप में विभेदित पता करने के लिए अगर वहाँ एक डेमॉन में व्यवहार में कोई अंतर हो सकता है चाहता हूँ एक सामान्य प्रक्रिया से, मैंने पहली पंक्ति में उल्लेख किया है। दोनों प्रकार की प्रक्रियाएं अपना काम करती हैं, और उपयोगकर्ता के साथ बातचीत करती हैं, जिनकी उन्हें अपनी नौकरी करने की आवश्यकता होती है।

क्या इससे अधिक दायित्व हैं?

उत्तर

18

वास्तव में नहीं। एक डिमन एक ऐसी प्रक्रिया के लिए एक शब्द है जो लगातार चलता है और आमतौर पर टर्मिनल से जुड़ा नहीं होता है।

डेमन्स प्रक्रियाओं की एक अलग श्रेणी नहीं हैं और उनके पास कोई विशेष विशेषाधिकार या गुण नहीं हैं।

एक बीएसडी/लिनक्स सी फ़ंक्शन है जिसे daemon (man page) कहा जाता है, लेकिन यह वास्तव में आपके टर्मिनल से आपकी प्रक्रिया को अलग करने का एक आसान तरीका है। यह इतना नाम दिया गया है क्योंकि यह आमतौर पर डेमन्स करता है, न कि दूसरी तरफ।

+2

इसलिए यदि मैं '$ प्रक्रिया' जैसे खोल से एक प्रक्रिया निष्पादित करता हूं, तो क्या यह एक डिमन के रूप में योग्य है? – Lazer

+3

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

1

सवाल एक छोटे से अस्पष्ट है, लेकिन मैं वैसे भी कोशिश करता हूँ:

तकनीकी तौर पर, किसी भी अन्य की तरह प्रक्रियाओं डेमॉन हैं। वे आमतौर पर, लेकिन आवश्यक नहीं हैं, विविध फ़ाइल डिस्क्रिप्टर बंद हैं और अन्य व्यवहार लंबे समय तक रहने वाली प्रक्रियाओं के लिए उपयुक्त हैं। उच्च स्तर के लिए देखें कि अधिकांश डिमन प्रक्रियाएं कैसे स्थापित की जाती हैं (पायथन में), चेक आउट करें: http://www.noah.org/wiki/Daemonize_Python

तो अंतर वास्तव में जीवन चक्र और उपयोगकर्ताओं के लिए नीचे आते हैं। डेमॉन प्रक्रिया लंबे समय तक जीवित रहती है, आमतौर पर एक दिए गए रनलेवल के रूप में। वे आमतौर पर अन्य सिस्टम-व्यापी प्रक्रियाओं को सेवाएं प्रदान करते हैं, या औसत उपयोगकर्ता चलाने की प्रक्रिया से अधिक प्रक्रियाएं ..

+0

मैं यह नहीं कहूंगा कि वे आमतौर पर सिस्टम-व्यापी होते हैं, वे किसी दिए गए उपयोगकर्ता सत्र के लिए स्थानीय भी हो सकते हैं। – Christo

3

एक प्रक्रिया और एक Daemon के बीच मुख्य अंतर यह है कि एक Daemon के माता-पिता init है - पहली प्रक्रिया * निक्स बूटिंग के दौरान शुरू कर दिया। और यही कारण है कि डेमॉन टर्मिनल से कनेक्ट नहीं है। तो जब आप अपना टर्मिनल बंद करते हैं तो इसे ओएस द्वारा नहीं मारा जाएगा। लेकिन फिर भी आप अपने डेमॉन पर सिग्नल भेज सकते हैं।

+1

आप डिमन्स शुरू या बंद कर सकते हैं। यहां तक ​​कि नए डिमन्स भी बनाएं। वे अनिवार्य रूप से init द्वारा शुरू नहीं कर रहे हैं। – 0xc0de

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^