web-dev-qa-db-fra.com

Comment puis-je lister les scripts en cours d'exécution bash par le nom du script?

ps renvoie bash comme nom du processus ... J'aimerais plutôt le nom du script Shell.

Par exemple, si mon script est TestEric.sh, je souhaite répertorier le nombre d'instances de ce script en cours d'exécution.

7
Eric Mamet

Le problème ici est que ps par défaut ne montre que la commande de base dans sa sortie, pas toute la ligne de commande, y compris les arguments.

Si vous lancez votre script avec bash TestEric.sh, la commande de base est bash. Si vous l'exécutez en tant que TestEric.sh (avec éventuellement son chemin), la commande de base sera celle-ci et non pas bash.


Vous pouvez facilement utiliser pgrep au lieu de ps pour répertorier les processus filtrés par nom. Il possède un drapeau -f qui lui permet de correspondre au modèle donné avec la ligne de commande complète au lieu de la seule commande de base.

L’indicateur -a lui permet d’afficher la totalité de la ligne de commande dans sa sortie à des fins de débogage au lieu du simple PID. Une fois que vous avez vérifié que cela fonctionne, vous pouvez/devez le supprimer à nouveau dans votre script.

Essaye ça:

pgrep -f -a TestEric.sh

Vous pouvez ultérieurement compter les processus à l'aide de wc en comptant les lignes de sortie pgrep:

pgrep -f TestEric.sh | wc -l
9
Byte Commander

Vous pouvez essayer de lancer ps u à la place. Dans les pages de manuel, l'option u correspond à display user-oriented format, ce qui affichera à la fois le shell utilisé pour exécuter le script et le nom du script lui-même.

2
Elhitch

Apparemment, cela aide si j'ajoute !#/bin/bash au début du fichier ... Ensuite, le nom du script apparaît dans le rapport ps.

1
Eric Mamet