2014-09-09 5 views

Antwort

30

können Sie verwenden:

ps -ef | grep '[j]ava' 

Oder wenn pgrep verfügbar ist dann besser zu nutzen:

pgrep -f java 
+2

habe ich versucht, die beiden Befehle, aber pgrep arbeitet, was ich zuerst ein 'ps -ef expected.But | grep '[j] ava'' funktioniert nicht. – openquestion

+0

Wie gesagt, 'pgrep' ist viel zuverlässiger, also benutze es wenn verfügbar. Der 'ps' Befehl und seine Optionen sind sehr plattformabhängig. – anubhava

21

verwenden: ps -C <name> -o pid=

+5

Warum wird das abgelehnt? Es scheint nicht nur zu funktionieren, sondern verwendet auch den gewünschten Befehl ps und keine Pipe-Filter. In meinem Fall konnte ich keine Rohre (Gründe ..) verwenden, so dass dies ein Lebensretter war. Man könnte einen ganzen Tag damit verbringen, die Manpage für PS zu lesen ... danke @ventsyv –

+0

Vielleicht, weil es nicht extrem portabel ist, aber auch die anderen Lösungen nicht, und die ursprüngliche Frage wurde mit Redhat Linux getaggt. Zufällig sah ich einen Commit von einem meiner Ingenieure, der einen portablen Weg brauchte, um einen bestimmten Java-Prozess unter OSX, RHEL Linux und AIX zu erkennen. Und genau das haben sie sich ausgedacht: 'ps -A -o pid, args | grep \ [j] ava'. – Moreaki

35

Sie können Ihre Ausgabe an awk weiterleiten, um nur die PID zu drucken. Zum Beispiel:

ps -ef | grep nginx | awk '{print $2}' 
9439 
-1
adb shell procrank | grep TYPE_YOUR_PROCESS_NAME_INSTEAD | awk '{print $1}'