Hoe krijg ik de PID van een proces door de procesnaam op te geven in Mac OS X?

Ik ben een script aan het schrijven om de CPU en MEM van een bepaald proces te bewaken. Daarvoor moet ik de naam van het te bewaken proces insturen als een commandoregelargument. Bijvoorbeeld.

./monitorscript <pname>

Ik moet de pid van het proces in het script krijgen, zodat ik een ps -p <pid>erin kan gebruiken.

Hoe krijg ik de pid van een proces gezien de procesnaam?

Ik begrijp dat er meerdere processen met dezelfde naam kunnen zijn. Ik wil gewoon het eerste proces uit die lijst halen.


Antwoord 1, autoriteit 100%

Het antwoord hierboven was grotendeels correct, het had alleen wat aanpassingen nodig voor de verschillende parameters in Mac OSX.

ps -A | grep [f]irefox | awk '{print $1}'

Antwoord 2, autoriteit 59%

U kunt het pgrep-commando gebruiken zoals in het volgende voorbeeld

$ pgrep Keychain\ Access
44186

Antwoord 3, autoriteit 51%

Je kunt pidofinstalleren met Homebrew:

brew install pidof
pidof <process_name>

Antwoord 4, autoriteit 8%

Deze oplossing komt strikter overeen met de procesnaam:

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

Deze oplossing heeft de volgende voordelen:

  • het negeert opdrachtregelargumenten zoals tail -f ~/Dropbox
  • het negeert processen in een map zoals ~/Dropbox/foo.sh
  • het negeert processen met namen als ~/DropboxUID.sh

Antwoord 5, autoriteit 7%

Dit is het kortste commando dat ik kon vinden dat het werk doet:

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

Door haakjes rond de eerste letter te plaatsen, kan awk het awk-proces zelf niet vinden.


Antwoord 6, autoriteit 2%

Probeer deze:

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

De opdracht psproduceert de volgende uitvoer, met de PID in de eerste kolom en de naam van het uitvoerbare bestand (alleen) in de tweede kolom:

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

…die awkverwerkt, waarbij de eerste kolom (pid) wordt afgedrukt en na de eerste overeenkomst wordt afgesloten.


Antwoord 7

Je kunt dit proberen

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

Antwoord 8

ps -o ppid=$(ps -ax | grep nameOfProcess | awk ‘{print $1}’)

Drukt het wijzigingsproces pid af en vervolgens de bovenliggende PID. U kunt dan de ouder doden, of u kunt die parentPID gebruiken in de volgende opdracht om de naam van het bovenliggende proces te krijgen:

ps -p parentPID -o comm=

Voor mij was de ouder ‘login’ :\


Antwoord 9

Waarom voer je TOP niet uit en gebruik je de opties om te sorteren op andere statistieken dan PID? Zoals de meest gebruikte PID van de CPU/MEM?

top -o cpu <—sorteert alle processen op CPU-gebruik

Other episodes