एक डेमन क्या है?


12

मैं अपने उबंटू कंप्यूटर पर चलने वाले डेमोंस के बारे में बहुत सारी बातें सुनता हूं - वे क्या हैं?

जवाबों:


15

संक्षेप में, एक डेमन एक पृष्ठभूमि प्रक्रिया है

डेमन केवल पृष्ठभूमि में चलने वाले सामान्य कार्यक्रम हो सकते हैं, हालांकि अधिकांश एक प्रक्रिया शुरू करने, इसे बनाने और माता-पिता से बाहर निकलने के द्वारा बनाए जाते हैं।

एक प्रक्रिया को कांटा करने का मतलब है इसकी एक सटीक प्रतिलिपि बनाना। उस प्रक्रिया के जनक, यदि वास्तविक माता-पिता तुरंत समाप्त हो जाते हैं, तो अब यह init प्रक्रिया है /sbin/init, जो हर यूनिक्स जैसे ऑपरेटिंग सिस्टम पर शुरू की गई पहली चीज़ है। अब, प्रक्रिया को एक डेमन कहा जाता है, इसका कोई TTY नहीं है।

यहाँ पायथन में एक डेमन का उदाहरण दिया गया है:

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"

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

यदि आप उदाहरण चलाते हैं, तो आप देखेंगे, दो सेकंड के बाद यह प्रिंट करता है, भले ही आपने कमांड-लाइन पर शुरू की गई प्रक्रिया को समाप्त कर दिया हो। इस प्रक्रिया की प्रतिलिपि अब 'init' द्वारा चलाई जाती है।


8
इस पर विस्तार करने के लिए, यदि आप विंडोज से लिनक्स पर आ रहे हैं, तो आप डेमोंस को विंडोज की "सेवाओं" के बराबर * निक्स के रूप में सोच सकते हैं।
नाथविल

1
@ stefano-palazzo आपने कहा "... इसके साथ कोई TTY संबद्ध नहीं है", लेकिन फिर "... आप देखेंगे, दो सेकंड के बाद यह प्रिंट करता है ..."। मैंने सोचा कि टीटीवाई को अलग करने का मतलब है कि आप टर्मिनल पर नहीं लिख सकते।
जॉर्ज बुकरन

1
@ जॉर्ज बोचारण छपाई थोड़ी शरारती है। यह अभी भी tty के मानक आउटपुट स्ट्रीम को हैंडल कर सकता है जिसने इसे शुरू किया था। जब आप कोई फ़ाइल खोलते हैं (जैसे / dev / stdout), तो आपको एक नंबर मिलता है (जिसे फाइल डिस्क्रिप्टर कहा जाता है), और यह सब आपको इसे लिखने की आवश्यकता है जब तक कि इसे खोलने वाली प्रक्रिया अभी भी चल रही है (आप देख सकते हैं) में फ़ाइलें खोली /proc/*/fd)। एक अच्छी तरह से व्यवहार किए गए डेमन ने स्टडआउट, स्टडर, और स्टडिन को हैंडल देकर पूरी तरह से खुद को टटी से अलग कर लिया।
स्टेफानो पलाज़ो

1
@StefanoPalazzo मैं देख रहा हूँ। माता-पिता की प्रक्रिया std / out / mis के संदर्भ को बनाए रख सकती है और फिर भी इससे अलग रह सकती है। अगर मैं मनमाने ढंग से TTY का संदर्भ रख सकता हूं, तो, एक प्रक्रिया को अलग करने का क्या मतलब है? मैंने पाया कि < superuser.com/questions/178587/… > उपयोगी है, लेकिन अभी भी अस्पष्ट लगता है।
जॉर्ज बुकरन

1
@JorgeBucaran इसका मतलब है कि आपके द्वारा बनाई गई नई (एक लॉग फ़ाइल की तरह) नई प्रक्रियाओं के साथ स्वयं stdio (जैसे dup2 का उपयोग करके ) को अधिलेखित करना । यहाँ एक पूर्ण उदाहरण है
Stefano Palazzo

1

मल्टीटास्किंग कंप्यूटर ऑपरेटिंग सिस्टम में, एक डेमन एक कंप्यूटर प्रोग्राम है जो एक इंटरैक्टिव यूजर के सीधे नियंत्रण में होने के बजाय एक पृष्ठभूमि प्रक्रिया के रूप में चलता है। परंपरागत रूप से, एक डी के नाम की प्रक्रिया अक्षर d के साथ समाप्त होती है, स्पष्टीकरण के लिए कि प्रक्रिया वास्तव में, एक डेमन है, और एक डेमन और एक सामान्य कंप्यूटर प्रोग्राम के बीच भेदभाव के लिए। उदाहरण के लिए, syslogd डेमॉन है जो सिस्टम लॉगिंग सुविधा को लागू करता है, और sshd एक डेमॉन है जो आने वाले SSH कनेक्शनों की सेवा करता है।

जैसा कि आप डेमन की परत देख सकते हैं


2
बोली कहाँ से है?
ज़न्ना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.