सभी चल रहे डेमों को कैसे सूचीबद्ध करें?


32

मेरे सवाल से , यह स्पष्ट था कि मैं आसानी से डेमॉन की विशेषताओं को तय नहीं कर सकता हूं। मैंने विभिन्न लेखों में और विभिन्न मंचों से पढ़ा है कि service --status-allकमांड का उपयोग मेरे सिस्टम के सभी डेमों को सूचीबद्ध करने के लिए किया जा सकता है। लेकिन मुझे नहीं लगता कि कमांड सभी डेमों को सूचीबद्ध NetworkManagerकर रहा है, क्योंकि एक डीमन जो वर्तमान में मेरे Ubuntu 14.04सिस्टम में चल रहा है, कमांड द्वारा सूचीबद्ध नहीं है। क्या चल रहे डेमॉन को सूचीबद्ध करने के लिए कुछ कमांड है या फिर filesystemखुद से डेमॉन को खोजने का कोई तरीका है?


क्या आप सुनिश्चित हैं कि यह सूचीबद्ध नहीं है? कैसे चेक कर रहे हैं? मैं इसे अपने डेबियन पर देख सकता हूं। ध्यान दें कि नाम है network-manager, नहीं NetworkManager
terdon

हाँ। मुझे यकीन है। नेटवर्क शब्द से संबंधित कुछ भी सूचीबद्ध नहीं है। इसके अलावा यह सूचीबद्ध है anacronजिसका उल्लेख इसके init स्क्रिप्ट में एक डेमन नहीं है।
जकज

एनाक्रॉन का डेमॉन नहीं होना शब्दार्थ का अधिक प्रश्न है क्योंकि यह लगातार नहीं चलाया जाता है। यह अभी भी एक सेवा के रूप में चलाया जाता है, जिसे आप सामान्य रूप से डेमॉन के रूप में संदर्भित करते हैं। कृपया अपने प्रश्न को संपादित करें और i) हमें बताएं कि आप कौन सा उबनून चल रहे हैं और ii) "डेमॉन" से आपका वास्तव में क्या मतलब है। यहाँ आपका अंतिम उद्देश्य क्या है?
terdon

मुझे लगता है कि पृष्ठभूमि में चलने वाली कोई भी सेवा एक डेमन है। मैंने उल्लेख किया anacronक्योंकि यह कहा गया था /etc/init.d/anacronकि यह एक डेमॉन नहीं है। मेरा उद्देश्य C++अपने सिस्टम में चल रहे सभी डेमों को सूचीबद्ध करने के लिए एक कार्यक्रम लिखना है। उसके लिए मुझे यह जानना होगा कि विवरण प्राप्त करने के लिए किन फाइलों को पार्स करना है।
जैकज

1
ठीक है, यदि आप डेमन को सेवाओं के रूप में परिभाषित करते हैं, तो आपको service --status-allइसकी आवश्यकता है। उबंटू NetworkManager को अलग तरह से व्यवहार करता है। मैं दोनों मिल networkingऔर network-managerके उत्पादन में services --status-allडेबियन पर लेकिन केवल networkingUbuntu पर। मुझे लगता है कि आपको परिभाषित करने की आवश्यकता है कि आप वास्तव में "डेमॉन" से क्या मतलब है।
terdon

जवाबों:


52

डेमॉन की धारणा फाइलों से नहीं, प्रक्रियाओं से जुड़ी है । इस कारण से, "फाइल सिस्टम पर डेमन को खोजने" में कोई समझदारी नहीं है। बस धारणा को थोड़ा स्पष्ट करने के लिए: एक प्रोग्राम एक निष्पादन योग्य फ़ाइल (आउटपुट में दिखाई देता है ); एक प्रक्रिया उस प्रोग्राम का एक उदाहरण है (आउटपुट में दिखाई देता है )।lsps

अब, यदि हम अपने उत्तर में दी गई जानकारी का उपयोग करते हैं, तो हम उन प्रक्रियाओं की खोज करके रनिंग डेमों को खोज सकते हैं, जो उनके साथ जुड़े एक नियंत्रित टर्मिनल के बिना चलती हैं । यह काफी आसानी से किया जा सकता है ps:

$ ps -eo 'tty,pid,comm' | grep ^?

ttyउत्पादन क्षेत्र में शामिल है "?" जब प्रक्रिया का कोई नियंत्रण टर्मिनल नहीं है।

यहां बड़ी समस्या तब आती है जब आपका सिस्टम एक ग्राफिकल वातावरण चलाता है। चूंकि जीयूआई कार्यक्रम (यानी क्रोमियम) एक टर्मिनल से जुड़े नहीं हैं, वे आउटपुट में भी दिखाई देते हैं। एक मानक प्रणाली पर, जहां रूट ग्राफ़िकल प्रोग्राम नहीं चलाता है, आप बस पिछली सूची को रूट की प्रक्रियाओं तक सीमित कर सकते हैं। यह ps' -Uस्विच ' का उपयोग करके प्राप्त किया जा सकता है ।

$ ps -U0 -o 'tty,pid,comm' | grep ^?

फिर भी, दो समस्याएं यहां उत्पन्न होती हैं:

  • यदि रूट चित्रमय कार्यक्रम चला रहा है, तो वे दिखाएंगे।
  • रूट विशेषाधिकारों के बिना चलने वाले डेमॉन नहीं करेंगे। ध्यान दें कि बूट समय पर शुरू होने वाले डेमन आमतौर पर रूट के रूप में चल रहे हैं।

मूल रूप से, हम सभी कार्यक्रमों को एक नियंत्रित टर्मिनल के बिना प्रदर्शित करना चाहते हैं , लेकिन जीयूआई कार्यक्रम नहीं । सौभाग्य से हमारे लिए, GUI प्रक्रियाओं को सूचीबद्ध करने के लिए एक कार्यक्रम है xlsclients:! एसएलएम का यह उत्तर बताता है कि सभी जीयूआई कार्यक्रमों को सूचीबद्ध करने के लिए इसका उपयोग कैसे करें, लेकिन हमें इसे उल्टा करना होगा, क्योंकि हम उन्हें बाहर करना चाहते हैं। यह --deselectस्विच का उपयोग करके किया जा सकता है ।

सबसे पहले, हम उन सभी GUI कार्यक्रमों की एक सूची बनाएंगे, जिनके लिए हमारे पास प्रक्रियाएँ चल रही हैं। मैंने जो उत्तर दिया है, उससे जुड़ा हुआ, यह प्रयोग करके किया गया है ...

$ xlsclients | cut -d' ' -f3 | paste - -s -d ','

अब, psएक -Cस्विच है जो हमें कमांड नाम से चयन करने की अनुमति देता है। हमें बस हमारी कमांड सूची मिली है, इसलिए इसे psकमांड लाइन में इंजेक्ट करें । ध्यान दें कि मैं --deselectबाद में अपने चयन को उलटने के लिए उपयोग कर रहा हूं ।

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect

अब, हमारे पास सभी गैर-जीयूआई प्रक्रियाओं की एक सूची है। चलो हमारे "कोई TTY संलग्न" नियम को न भूलें। इसके लिए, मैं प्रत्येक प्रक्रिया (और इसकी पूर्ण कमांड लाइन) के -o tty,argsआउटपुट के लिए पिछली पंक्ति में जोड़ दूँगा tty:

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect -o tty,args | grep ^?

अंतिम grepसभी पंक्तियों को कैप्चर करता है जो "?" से शुरू होती हैं, अर्थात, सभी प्रक्रियाएं एक नियंत्रित ट्टी के बिना। और वहाँ तुम जाओ! यह अंतिम पंक्ति आपको एक नियंत्रित टर्मिनल के बिना चलने वाली सभी गैर-जीयूआई प्रक्रिया देती है। ध्यान दें कि आप अभी भी इसे सुधार सकते हैं, उदाहरण के लिए, कर्नेल थ्रेड्स (जो प्रक्रियाएं नहीं हैं) को छोड़कर ...

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,args | grep ^?

... या आपके द्वारा पढ़ने के लिए जानकारी के कुछ कॉलम जोड़कर:

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,uid,pid,ppid,args | grep ^?

linux एक वर्चुअल फाइल सिस्टम पर कई जानकारी रखता है। इसलिए यह संभव है "फाइल सिस्टम पर डेमन को ढूंढना" !!!
मैसिमो

0

मैंने "पुराने" sysv initd के लिए लिखा था, आपको यह जांचना होगा कि क्या यह आपके डिस्ट्रो पर काम कर रहा है।

अच्छे राक्षसों ने / etc / initd में अच्छी तरह से स्टार्टअप स्क्रिप्ट लिखी हैं

रनवे को बदलते समय, init रनिंग डेमन को कैसे जानता है?

यह निर्देशिका में उनके नामों की तलाश करता है

/ Var / लॉक / subsys

तो तुम कर सकते हो

वहां से नामों की सूची प्राप्त करें

सभी चल रही प्रक्रियाओं को स्कैन करें और जांचें कि क्या नाम सूची के अंदर है: बिंगो!

सभी प्रक्रियाओं को स्कैन करने के लिए: प्रत्येक उपनिर्देशिका को सूचीबद्ध करें

/ proc

यदि इसका नाम अंक है, तो यह एक चलने वाली प्रक्रिया का मार्ग है।

उदाहरण के लिए, pid 1234 के साथ प्रक्रिया की स्थिति यह फ़ाइल है

/ Proc / 1234 / स्थिति

इसे खोलें और पहली पंक्ति प्राप्त करें, "नाम:" से शुरू होता है

देख

http://man7.org/linux/man-pages/man5/proc.5.html

https://linuxexplore.com/2014/03/19/use-of-subsystem-lock-files-in-init-script/

(बुरा स्वरूपण के लिए खेद है, मैं अपने सेल फोन से लिख रहा हूं ...)

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