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.
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.
Réponses:
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.
if ps -ax | grep [p]rocess_name; then whatever; fi
.
pidof process_name
.
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.
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' -C
option de ps
pour 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.