2010-02-04 16 views
6

मैं यह जांचने की कोशिश कर रहा हूं कि कोई प्रक्रिया चल रही है या नहीं। यदि यह चल रहा है तो मुझे 'ओके' का रिटर्न वैल्यू चाहिए और यदि 'ठीक नहीं' का रिटर्न वैल्यू नहीं है। मैं केवल 'पीएस' का उपयोग किसी अन्य तर्क के बिना (उदाहरण के लिए पीएस-एफएफ) कर सकता हूं यदि सही शब्द है। कोड मैं है:जांचें कि प्रक्रिया चल रही है

if ps | grep file; then echo 'OK'; else echo 'NO'; fi 

इस के साथ समस्या यह है कि यह सही प्रक्रिया के लिए खोज नहीं है और हमेशा रिटर्न 'ठीक' है, मैं सभी जानकारी मैं सिर्फ अगर जानना चाहते हैं प्रकट करना चाहते हैं फ़ाइल मौजूद है या नहीं।

उत्तर

10

आपका कोड हमेशा 'ठीक' लौटाता है, क्योंकि grep खुद को प्रक्रिया सूची में ढूंढता है ('grep फ़ाइल' में 'फ़ाइल' शब्द होता है)। एक फिक्स होगा 'grep -e [f] ile' (-नियमित अभिव्यक्ति के लिए), जो खुद को नहीं ढूंढता है।

6

स्पेयर grep वास्तविक समस्याओं के लिए:

ps -C file 

grep का उपयोग पूरी तरह की समस्या से बचा जाता है।

if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then 
... 
elif [ ... ]; then 
... 
else 
... 
fi 

यह डेबियन 6 में ठीक काम करता है, यकीन है कि अन्य distros के बारे में नहीं:

-1

रूप में अच्छी तरह ग्रेप के साथ एक समाधान नहीं है। '{print $11}' की आवश्यकता है, क्योंकि sytem grep को एक प्रक्रिया के रूप में भी मानता है।

1

जब मैं पीआईडी ​​जानता हूँ कि मैं पसंद करते हैं:

[ -d /proc/<pid> ] && echo OK || echo NO 
0
if ps | grep file | grep -v grep; 
then echo 'ok'; 
else echo 'no'; 

ग्रेप -v ग्रेप सुनिश्चित करें कि परिणाम आपको मिल निष्पादन में ग्रेप बयान नहीं है बनाता है।

1

"pgrep" के बारे में क्या?

$ pgrep -x foo 
xxxx 
$ 

जहां xxxx नाम foo के साथ चल रहे बाइनरी का पिड है। अगर foo नहीं चल रहा है, तो कोई आउटपुट नहीं।

इसके अलावा

:

$ अगर [[pgrep -x foo]]; फिर "हां" गूंजें; अन्य "गूंज" गूंजें; फाई;

अगर फू चल रहा है तो "हाँ" प्रिंट करेगा; अगर नहीं "नहीं"।

pgrep मैन पेज देखें।

संबंधित मुद्दे