Comment obtenir le PID d'un processus en donnant le nom du processus dans Mac OS X?
J'écris un script pour surveiller le CPU et le MEM d'un processus donné. Pour cela j'ai besoin d'envoyer le nom du processus à surveiller comme un argument de ligne de commande. Exemple.
./monitorscript <pname>
J'ai besoin d'obtenir le pid du processus dans le script, de sorte que je peux utiliser un ps -p <pid>
à l'intérieur.
Comment puis-je obtenir le pid d'un processus donné son nom du processus?
Je comprends qu'il peut y avoir plusieurs processus dans le même nom. Je veux juste sortir le premier processus de cette liste.
8 réponses
La réponse ci-dessus était la plupart du temps correcte, juste besoin de quelques ajustements pour les différents paramètres de Mac OSX.
ps -A | grep -m1 firefox | awk '{print $1}'
Vous pouvez utiliser la commande pgrep comme dans l'exemple suivant
$ pgrep Keychain\ Access
44186
C'est la commande la plus courte que j'ai pu trouver qui fait le travail:
ps -ax | awk '/[t]he_app_name/{print $1}'
Mettre des crochets autour de la première lettre empêche awk de trouver le processus awk lui-même.
Essayez celui-ci:
echo "$(ps -ceo pid=,comm= | awk '/firefox/ { print $1; exit }')"
La commande ps
produit une sortie comme celle-ci, avec le PID dans la première colonne et le nom de l'exécutable (uniquement) dans la deuxième colonne:
bookworm% ps -ceo pid=,comm=
1 launchd
10 kextd
11 UserEventAgent
12 mDNSResponder
13 opendirectoryd
14 notifyd
15 configd
...que awk
traite, en imprimant la première colonne (pid) et en sortant après la première correspondance.
Cette solution correspond plus strictement au nom du processus:
ps -Ac -o pid,comm | awk '/^ *[0-9]+ Dropbox$/ {print $1}'
Cette solution présente les avantages suivants:
- , il ignore les arguments de ligne de commande comme
tail -f ~/Dropbox
- il ignore les processus dans un répertoire comme
~/Dropbox/foo.sh
- , il ignore les processus avec des noms comme
~/DropboxUID.sh
Vous pouvez essayer ceci
pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)
Pourquoi ne pas exécuter TOP et utiliser les options pour trier par d'autres métriques, autres que PID? Comme, PID le plus utilisé du CPU / MEM?
Top-o cpu