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.

31
demandé sur Pradep 2012-07-18 21:11:36

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}'
58
répondu Vijay C 2012-07-18 17:52:41

Vous pouvez installer pidof avec Homebrew:

brew install pidof
pidof <process_name>
24
répondu hgascon 2015-02-24 10:31:39

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

$ pgrep Keychain\ Access
44186
20
répondu bergercookie 2016-02-28 16:38:52

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
répondu phatmann 2013-08-07 08:47:20

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.

2
répondu Nicholas Riley 2012-07-18 23:59:20

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
2
répondu stepmuel 2014-08-10 14:10:11

Vous pouvez essayer ceci

pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)
1
répondu chepner 2012-07-18 17:20:09

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

-2
répondu Ape 2016-02-23 16:05:17