Quelle commande Linux puis-je utiliser pour vérifier que quelque chose se trouve dans la liste de processus?

1

Je veux analyser la sortie de la commande ps et renvoyer true ou false si un programme est trouvé. Comment quelqu'un ferait-il cela? J'ai accès à la ligne de commande, elle est donc ouverte pour moi, sans restrictions.


la source
Au départ, je pensais que cela devrait être déplacé vers superuser.com et voté en tant que tel, mais l'OP le veut dans un script shell, donc stackoverflow.com lui convient.
Mehrdad Afshari

Réponses:

5

Dirigez la sortie vers grep.

ps -ax | grep process_name | grep -v grep

Ce qui précède convient mieux à la vérification causale des éléments à la main. Si vous voulez utiliser quelque chose dans un script, utilisez la valeur de retour de pidof:

pidof process_name

renvoie 0 s'il existe un processus portant le nom spécifié et 1 dans le cas contraire.

Mehrdad Afshari
la source
Oui, mais ça ne retournera pas de valeur. J'ai besoin que quelque chose retourne vrai s'il est trouvé.
Ou, utilisez if ps -ax | grep [p]rocess_name; then whatever; fi.
Alok
1
Jim: si vous voulez l'utiliser dans un script, utilisez pidof process_name.
Mehrdad Afshari
4

Utilisez pgrep , comme dans pgrep pattern.

Tobu
la source
4

Dans le cas général, vous devriez rechercher votre processus SPÉCIFIQUE dans la liste des processus, plutôt que quelque chose qui porte le même nom.

Nous avons déjà été piqués par des bogues dans lesquels un processus portant le même nom (ou un nom similaire) apparaît et rompt quelque chose (généralement un moniteur ou un script de démarrage / arrêt, il n'est donc généralement pas vital).

Votre processus doit écrire un fichier pid au démarrage (ou avant, en ayant un script shell écrire son pid puis exécuter sa tâche), puis vous pouvez faire référence au contenu de ce fichier pid dans un script shell ultérieur.

Pour vérifier si un pid spécifique est en cours d'exécution, tuez-le avec "signal 0" - cela n'envoie pas réellement de signal, il vérifie simplement qu'il est présent.

MarkR
la source
1

Je ne recommanderais pas l'approche ps et pipe par l'approche grep dans l'autre raison de la réponse: vous risqueriez d'obtenir des faux positifs (en particulier pour les noms de commandes abrégés abondants sous UNIX) et de devoir recourir à un double greps, etc. . Au lieu de cela, envisagez d'utiliser l' -Coption de pspour imprimer le pid du processus qui vous concerne.

La meilleure approche consiste toutefois à conserver le pid du processus que vous avez créé dans un fichier ou dans la mémoire du processus du contrôleur afin que vous le sachiez à l’avance et que vous puissiez le rechercher.

Noufal Ibrahim
la source
0

utilisez si pgrep APPLICATION > /dev/nullalors dox; Fi

chezgi
la source