Comment vérifier si le processus est en cours d'exécution dans Linux
Je suis en train de vérifier automatiquement si un processus est en cours d'exécution ou non et d'avoir à effectuer des prochaines étapes en conséquence. J'avais écrit un script bash, mais il ne semble pas fonctionner.
if ps aux | grep [M]yProcessName > /dev/null
then
echo "Running"
else
echo "Not running"
fi
Est mon if
déclaration employé à tort?
source d'informationauteur noMAD
Vous devez vous connecter pour publier un commentaire.
Vous ne voulez pas savoir si un processus particulier (de connu pid) est en cours d'exécution (ce qui peut être fait par l'essai si
/proc/1234/
existe pour pid 1234), mais si un processus est en cours d'exécution d'une commande (ou un exécutable).Avis que le kill(2) syscall peut être utilisé de façon portable pour vérifier si un processus est en cours (avec un 0 du signal, par exemple
kill(pid,0)
). À partir de l'intérieur d'un programme, c'est une façon de vérifier qu'un processus de connu pid est toujours existant et en cours d'exécution (ou d'attente).Vous pouvez utiliser le
pidof
commande pour trouver le processus de l'exécution de certains exécutable, par exemplepidof zsh
trouver tous leszsh
processus. Vous pouvez également utiliserkillall -s 0 zsh
Et vous pourriez être intéressé par le
pgrep
de l'utilité et la/proc
système de fichiers.Il existe une solution:
Cela fonctionne très bien sous Debian 6. '{print $11}' est nécessaire, parce que le système traite grep comme un processus de
La commande ci-dessus va vous donner l'id de processus. Assigner l'id de processus à une variable et faire -->
Aide -z pour vérifier si une chaîne est vide ou n'est pas, quelque chose comme cela pourrait fonctionner:
Sur mon système,
ps aux | grep ProcessName
toujours obtenir une ligne de que grep processus comme:Ainsi, le statut de sortie est toujours 0. Peut-être que c'est pourquoi ton script ne fonctionne pas.
return 0 synonyme de réussite, tandis que d'autres ont échoué
essayer cette