web-dev-qa-db-fra.com

Comment obtenir le PID d'un processus en donnant le nom du processus sous Mac OS X?

J'écris un script pour surveiller le CPU et le MEM d'un processus donné. Pour cela, je dois envoyer le nom du processus à surveiller comme argument de ligne de commande. Par exemple.

./monitorscript <pname>

J'ai besoin d'obtenir le pid du processus dans le script pour pouvoir utiliser un ps -p <pid> à l'intérieur.

Comment obtenir le pid d'un processus en fonction de son nom de processus?

Je comprends qu'il pourrait y avoir plusieurs processus sous le même nom. Je veux simplement retirer le premier processus de cette liste.

37
Pradep

La réponse ci-dessus était généralement correcte, il fallait juste quelques ajustements pour les différents paramètres de Mac OSX.

ps -A | grep -m1 firefox | awk '{print $1}'
67
Vijay C

Vous pouvez installer pidof avec Homebrew :

brew install pidof
pidof <process_name>
32
hgascon

Vous pouvez utiliser la commande pgrep comme dans l'exemple suivant

$ pgrep Keychain\ Access
44186
31
bergercookie

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.

4
phatmann

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 à l'intérieur d'un répertoire comme ~/Dropbox/foo.sh
  • il ignore les processus avec des noms comme ~/DropboxUID.sh
4
stepmuel

Essaye celui-là:

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.

2
Nicholas Riley

Vous pouvez essayer ceci

pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)
1
chepner