2010-02-04 6 views
6

J'essaie de vérifier si un processus est en cours d'exécution. Si elle est en cours d'exécution, je veux une valeur de retour de 'OK' et sinon une valeur de retour de 'Pas OK'. Je ne peux utiliser 'ps' sans aucun autre argument attaché (par exemple ps -ef) si c'est le bon terme. Le code que j'ai est:Vérifiez si le processus est en cours d'exécution

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

Le problème est qu'il ne cherche pas le processus exact et renvoie toujours « OK », je ne veux pas toutes les informations à paraître, je veux juste savoir si le fichier existe ou non.

Répondre

10

Votre code renvoie toujours 'OK', car grep se trouve dans la liste des processus ('fichier grep' contient le mot 'fichier'). Une solution serait de faire un `grep -e [f] ile '(-e pour l'expression régulière), qui ne se trouve pas.

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

de rechange grep pour des problèmes réels:

ps -C file 

évite le problème de l'utilisation grep tout à fait.

-1

Il y a une solution avec grep ainsi:

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

Cela fonctionne très bien dans Debian 6, pas sûr d'autres distros. '{print $11}' est nécessaire car le système traite grep en tant que processus.

1

Quand je sais le pid que je préfère:

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

grep -v grep fait en sorte que le résultat que vous obtenez est pas la déclaration de grep en cours d'exécution.

1

Qu'en est-il de "pgrep"? Où xxxx est le pid du binaire avec le nom foo. Si foo ne fonctionne pas, alors pas de sortie.

aussi:

$ si [[pgrep -x foo]]; puis écho "oui"; d'autre écho "non"; Fi;

affichera "yes" si foo est en cours d'exécution; "non" sinon.

Voir la page de manuel pgrep.

Questions connexes