यहां सवाल से , ओपी 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।