मेरा उत्तर 'ps' सूची में "फ़ॉबर" की खोज के लिए विशिष्ट उत्तर पर एक भिन्नता है। "ए" "पी" का तर्क "ऑक्स" की तुलना में अधिक पोर्टेबल है, मेरा मानना है, लेकिन यह परिवर्तन उत्तर के लिए अप्रासंगिक है। ठेठ जवाब इस तरह दिखता है:
$ ps -A -ww | grep [f]oobar
इसके बजाय मैं इस पैटर्न का उपयोग करता हूं:
$ ps -A -ww | grep [^]]foobar
मुख्य लाभ यह है कि इस पैटर्न के आधार पर स्क्रिप्ट लिखना आसान है, क्योंकि आप बस जिस भी पैटर्न की तलाश कर रहे हैं, उसके साथ एक स्टैटिक स्ट्रिंग "[^]" को संक्षिप्त करें। आपको स्ट्रिंग के पहले अक्षर को उतारने की ज़रूरत नहीं है और फिर इसे स्क्वायर ब्रेसिज़ के बीच डालें और फिर से उस बैक को फिर से जोड़ दें। जब शेल में स्क्रिप्टिंग करना आसान होता है, तो जिस पैटर्न को आप देख रहे थे, उसके सामने "[^]" चिपका दें। बैश में स्ट्रिंग टुकड़ा करना एक बदसूरत चीज है, इसलिए मेरी भिन्नता से बचा जाता है। यह भिन्नता उन पंक्तियों को दर्शाती है जहाँ पैटर्न एक प्रमुख दाएँ-वर्ग-कोष्ठक के बिना मेल खाता है]। चूँकि एक वर्ग ब्रैकेट को बाहर करने के लिए खोज पैटर्न वास्तव में वर्ग ब्रैकेट को पैटर्न में जोड़ता है तो यह कभी भी मेल नहीं खाएगा।
तो आप एक पोर्टेबल 'psgrep' कमांड निम्नानुसार लिख सकते हैं। यहां, मैं लिनक्स, ओएस एक्स बीएसडी और अन्य के बीच अंतर के लिए कुछ भत्ता बनाता हूं। यह 'ps' से कॉलम हेडर जोड़ता है, एक और अधिक कस्टम 'ps' प्रारूप प्रदान करता है जो मेरी ज़रूरतों को दांव पर लगाता है, और अतिरिक्त, अतिरिक्त विस्तृत को सूचीबद्ध करने वाली प्रक्रियाओं को प्रदर्शित करता है ताकि कोई भी कमांड-लाइन तर्क छूट न जाए। खैर, अधिकांश याद नहीं हैं। जावा जावा होने के नाते, यह अक्सर चीजों को सबसे खराब तरीके से करता है, इसलिए आप कुछ जावा सेवाओं को तर्क की अधिकतम अनुमत लंबाई से पहले चलाएंगे जो प्रक्रिया तालिका का ट्रैक रखेगा। मेरा मानना है कि यह 1024 अक्षर है। कमांड-लोन की लंबाई एक प्रक्रिया शुरू करने की अनुमति दी गई है, लेकिन कर्नेल प्रक्रिया तालिका लंबाई में 1K से अधिक का कुछ भी ट्रैक रखने के लिए परेशान नहीं करती है। एक बार कमांड शुरू होने के बाद कमांड-नाम और तर्क सूची isn '
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
ps aux |grep
के साथpgrep
(याpgrep -f
)।