2010-02-04 38 views
6

Ich versuche zu überprüfen, ob ein Prozess läuft. Wenn es läuft, möchte ich einen Rückgabewert von 'OK' und wenn nicht ein Rückgabewert von 'Nicht OK'. Ich kann 'ps' nur verwenden, wenn keine anderen Argumente angefügt sind (zB. Ps -ef), wenn das der richtige Ausdruck ist. Der Code, den ich habe, ist:Überprüfen, ob der Prozess läuft

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

Das Problem dabei ist, dass es nicht für den genauen Ablauf nicht suchen und immer wieder auf ‚OK‘, ich will nicht alle Informationen angezeigt Ich möchte nur wissen, ob Die Datei existiert oder nicht.

Antwort

10

Ihr Code gibt immer 'OK' zurück, da sich grep in der Prozessliste befindet ('grep file' enthält das Wort 'file'). Eine Lösung wäre eine `grep -e [f] ile '(-e für regulären Ausdruck), die sich nicht selbst findet.

2
ps | grep -q '[f]ile' 
6

Ersatz grep für echte Probleme:

ps -C file 

vermeidet das Problem grep insgesamt zu verwenden.

-1

Es gibt eine Lösung mit grep auch:

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

Dies funktioniert gut in Debian 6, nicht sicher über andere Distributionen. '{print $11}' wird benötigt, weil das System grep auch als Prozess behandelt.

1

Als ich die pid weiß, dass ich es vorziehen:

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

grep -v grep stellt sicher, dass das Ergebnis, das Sie erhalten, ist nicht die grep-Anweisung in der Ausführung.

1

Was ist mit "pgrep"?

Dabei ist xxxx die PID der Binärdatei mit dem Namen foo. Wenn foo nicht läuft, dann keine Ausgabe.

auch:

$ if [[pgrep -x foo]]; dann echo "ja"; sonst echo "nein"; fi;

wird "ja" drucken, wenn foo läuft; "Nein", wenn nicht.

siehe pgrep man page.

Verwandte Themen