के माध्यम से लिनक्स में प्रक्रिया की गिनती ढूँढना मैं लिनक्स में कमांड लाइन के माध्यम से उसी नाम के साथ चल रही प्रक्रियाओं की संख्या को खोजने का सबसे अच्छा तरीका ढूंढ रहा था। उदाहरण के लिए यदि मैं चल रही बैश प्रक्रियाओं की संख्या खोजना चाहता हूं और "5" प्राप्त करना चाहता हूं। वर्तमान में मेरे पास एक स्क्रिप्ट है जो 'पिडॉफ' करती है और फिर टोकनयुक्त स्ट्रिंग पर गिनती करती है। यह ठीक काम करता है लेकिन मैं सोच रहा था कि क्या एक बेहतर तरीका है जिसे कमांड लाइन के माध्यम से पूरी तरह से किया जा सकता है। आपकी सहायता के लिये पहले से ही धन्यवाद।कमांड लाइन
उत्तर
प्रणाली है कि है pgrep
उपलब्ध पर, -c
विकल्प प्रक्रियाओं है कि दिए गए नाम से मेल
pgrep -c command_name
नोट की संख्या की गिनती देता है कि यह एक grep
शैली मैच, नहीं एक सटीक है मैच, तो उदाहरण के लिए pgrep sh
bash
प्रक्रियाओं से भी मेल खाएगा। यदि आप एक सटीक मिलान चाहते हैं, तो -x
विकल्प का भी उपयोग करें।
यदि pgrep
उपलब्ध नहीं है, तो आप ps
और wc
का उपयोग कर सकते हैं।
ps -C command_name --no-headers | wc -l
ps
करने के लिए -C
विकल्प एक तर्क के रूप command_name
लेता है, और कार्यक्रम प्रक्रियाओं जिसका निष्पादन योग्य नाम दिया आदेश नाम से मेल खाता के बारे में जानकारी की एक तालिका प्रिंट करता है। यह एक सटीक मैच है, grep
-स्टाइल नहीं। --no-headers
विकल्प तालिका के शीर्षकों को दबा देता है, जो आमतौर पर पहली पंक्ति के रूप में मुद्रित होते हैं। --no-headers
के साथ, आपको मिलान की प्रति पंक्ति एक पंक्ति मिलती है। फिर wc -l
इसकी इनपुट में लाइनों की संख्या की गणना करता है और प्रिंट करता है।
result=`ps -Al | grep command-name | wc -l`
echo $result
यह वास्तव में क्या है मैं देख रहा था :) –
ps -Al | grep -c bash
बाद बैश स्क्रिप्ट एक क्रॉन जॉब के रूप में चलाया जा सकता है और आप संभवतः ईमेल यदि कोई प्रक्रिया कांटे ही बहुत ज्यादा हो सकता है।
for i in `ps -A -o comm= --sort=+comm | uniq`;
do
if ((`ps -C $i --no-headers | wc -l` > 10)); then
echo `hostname` $i `ps -C $i --no-headers | wc -l` ;
fi
done
अपनी चिंता की संख्या के साथ 10 बदलें।
TODO: "10" कमांड लाइन पैरामीटर के रूप में भी पारित किया जा सकता है। इसके अलावा, कुछ सिस्टम प्रक्रियाओं को अपवाद सूची में रखा जा सकता है।
उपर्युक्त में से कुछ मेरे लिए काम नहीं करते थे, लेकिन उन्होंने मुझे इस तरीके से मेरी मदद की।
ps aux | grep [j]ava -c
लिनक्स के लिए newbies के लिए:
ps aux
प्रिंट सभी वर्तमान में चल रहे प्रक्रियाओं, सभी प्रक्रियाओं है कि शब्द जावा, []
कोष्ठक प्रक्रिया तुम सिर्फ इसलिए भाग गया यह अभ्यस्त शामिल हटाने से मेल के लिए grep
खोजें कि एक चल रही प्रक्रिया के रूप में और अंत में -c
विकल्प गिनती के लिए खड़ा है।
आप कोशिश कर सकते हैं:
ps -ef | ग्रेप -cw [p]
या
ps aux rocess_name | ग्रेप -cw [p] rocess_name
जैसे:
ps -ef | ग्रेप -cw [i] nit
मुझे यह समाधान कितना आसान और साफ करना पसंद है –
मैं क्या यह अन्य distros पर है पता नहीं है, लेकिन Ubuntu पर, यह है:
nproc
nproc
coreutils
का हिस्सा है। तो, यह अधिकांश लिनक्स distros पर उपलब्ध होना चाहिए।
सूची सभी प्रक्रिया के नाम, प्रकार और गिनती
ps --no-headers -A -o comm | sort | uniq -c
तुम भी एक tty से जुड़ी प्रक्रिया
ps --no-headers a -o comm | sort | uniq -c
आप फिल्टर कर सकते हैं सूचीबद्ध कर सकते हैं साथ:
ps --no-headers -A -o comm | awk '{ list[$1] ++ } END { for (i in list) { if (list[i] > 10) printf ("%20s: %s\n", i, list[i]) } }'
हेडर को पोंछना किसी कारण से अच्छा है, जब मैं ps चलाता हूं तो 2 प्रक्रियाएं होती हैं और जब मैं ' पीएस - नो-हेडर | wc -l' 3 प्रक्रियाएं हैं। ऐसा लगता है कि प्रारंभिक नई लाइन गिनती है? – CMCDragonkai
हम्म, ऐसा लगता है कि 'pgrep -c' ओपनबीएसडी/डार्विन पर एक विकल्प नहीं है। क्या आप थोड़ा झगड़ा जोड़ सकते हैं कि आपने उन झंडे क्यों चुने हैं (दोनों आदेशों के लिए)? कुछ स्पष्टीकरण के बिना उपयोगकर्ताओं को आपके इरादे का प्रयास करने और अनुवाद करने के लिए 'मैन' पृष्ठ का उपयोग करने के लिए एक अलग डिस्ट्रो पर भी मुश्किल बनाता है ... – cwd
@cwd यकीन है, मैंने संपादित किया है। –