it-swarm.com.de

Wie erhalte ich die PID eines Prozesses unter Angabe des Prozessnamens in Mac OS X?

Ich schreibe ein Skript, um die CPU und den MEM eines bestimmten Prozesses zu überwachen. Dafür muss ich den Namen des zu überwachenden Prozesses als Kommandozeilenargument senden. Beispielsweise.

./monitorscript <pname>

Ich muss die pid des Prozesses im Skript erhalten, damit ich ein ps -p <pid> Nach innen verwenden kann.

Wie erhalte ich die PID eines Prozesses anhand seines Prozessnamens?

Ich verstehe, dass es mehrere Prozesse im gleichen Namen geben kann. Ich möchte nur den ersten Prozess aus dieser Liste herausholen.

37
Pradep

Die obige Antwort war größtenteils richtig, musste nur für die verschiedenen Parameter in Mac OSX angepasst werden.

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

Sie können pidof mit Homebrew installieren:

brew install pidof
pidof <process_name>
32
hgascon

Sie können den Befehl pgrep wie im folgenden Beispiel verwenden

$ pgrep Keychain\ Access
44186
31
bergercookie

Dies ist der kürzeste Befehl, den ich finden konnte, der die Arbeit erledigt:

ps -ax | awk '/[t]he_app_name/{print $1}'

Das Setzen von Klammern um den ersten Buchstaben verhindert, dass awk den awk-Prozess selbst findet.

4
phatmann

Diese Lösung entspricht dem Prozessnamen genauer:

ps -Ac -o pid,comm | awk '/^ *[0-9]+ Dropbox$/ {print $1}'

Diese Lösung bietet folgende Vorteile:

  • es ignoriert Befehlszeilenargumente wie tail -f ~/Dropbox
  • es ignoriert Prozesse in einem Verzeichnis wie ~/Dropbox/foo.sh
  • es ignoriert Prozesse mit Namen wie ~/DropboxUID.sh
4
stepmuel

Probier diese:

echo "$(ps -ceo pid=,comm= | awk '/firefox/ { print $1; exit }')"

Der Befehl ps erzeugt eine Ausgabe wie diese, mit der PID in der ersten Spalte und dem Namen der ausführbaren Datei (nur) in der zweiten Spalte:

bookworm% ps -ceo pid=,comm=
    1 launchd
   10 kextd
   11 UserEventAgent
   12 mDNSResponder
   13 opendirectoryd
   14 notifyd
   15 configd

... die awk verarbeitet, die erste Spalte (pid) druckt und nach dem ersten Treffer beendet.

2
Nicholas Riley

Sie können dies versuchen

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