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.
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}'
Vous pouvez installer pidof
avec Homebrew :
brew install pidof
pidof <process_name>
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.
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:
tail -f ~/Dropbox
~/Dropbox/foo.sh
~/DropboxUID.sh
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.
Vous pouvez essayer ceci
pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)