यहां सवाल से , ओपी pidof
एक शेल स्क्रिप्ट में एक प्रक्रिया के पिड को बार-बार प्रदूषित करना चाहता है । बेशक यह अक्षम्य है क्योंकि pidof
कार्यक्रम के लिए प्रति सेकंड कई बार एक नई प्रक्रिया शुरू की जानी चाहिए (मुझे नहीं पता कि यह प्रश्न में सीपीयू स्पाइक्स का कारण है, लेकिन ऐसा लगता है)।
आमतौर पर शेल स्क्रिप्ट में इस तरह की चीज के आसपास एक ही प्रोग्राम के साथ काम करना होता है जो आपको आवश्यक डेटा को आउटपुट करता है stdout
और यदि आवश्यक हो तो कुछ टेक्स्ट प्रोसेसिंग करना। हालांकि इसमें समवर्ती रूप से चलने वाले अधिक कार्यक्रम शामिल हैं, यह सीपीयू के गहन होने की संभावना है क्योंकि नई प्रक्रियाओं को मतदान के प्रयोजनों के लिए लगातार नहीं बनाया जा रहा है।
इसलिए उपर्युक्त प्रश्न के लिए, एक समाधान के लिए कुछ कार्यक्रम हो सकते हैं जो प्रक्रियाओं के नाम और ग्रिड को आउटपुट करते हैं क्योंकि वे बनाए जाते हैं। तब आप कुछ ऐसा कर सकते थे:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
इसके साथ समस्या यह है कि यह एक अधिक मौलिक प्रश्न उठाता है कि कैसे बनाए जा सकते हैं और प्रक्रिया के नाम कैसे मुद्रित किए जा सकते हैं?
मैंने एक प्रोग्राम बुलाया है ps-watcher
, हालांकि इसके साथ समस्या यह है कि यह सिर्फ एक perl
स्क्रिप्ट है जो बार-बार चलती है ps
इसलिए यह वास्तव में समस्या को हल नहीं करता है। एक अन्य विकल्प का उपयोग करना है auditd
जो लॉग के माध्यम से सीधे संसाधित होने पर संभवतः काम कर सकता है tail -f
। एक आदर्श समाधान इससे सरल और अधिक पोर्टेबल होगा, हालांकि मैं एक auditd
समाधान स्वीकार करूंगा यदि यह सबसे अच्छा विकल्प है।
dbus
) में बहुत गहराई से खुदाई कर सकता है ।
fork
, फिरexec
परिवार के एक सदस्य का उपयोग करके नया कार्यक्रम शुरू किया जाता है। तो आप शायद लॉग इन करना चाहते हैंexec*
, नहींfork
।