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 pidof
installeren 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 ps
produceert 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 awk
verwerkt, 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