2013-06-06 5 views
9

Ich schreibe ein Shell-Skript und ich möchte PID eines Prozesses mit Namen als "ABCD" erhalten. Was ich tat, war:PID des Prozesses in Shell-Skript erhalten

process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'` 

Dies wird PID von zwei Prozessen heißt der Prozess ABCD und der GREP-Befehl selbst was passiert, wenn ich nicht will PID von GREP erhalten ausgeführt und ich möchte PID nur von ABCD-Prozess?

Bitte vorschlagen.

Antwort

28

Nur grep weg Grep!

process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'` 
+0

Dank für die schnelle Answer.It worked.Also Was ist, wenn ich die PID des Skripts, das dies ausführt, nicht möchte? Weil mein Skript auch ABCD –

+0

enthält Sicherlich kann man sich etwas einfallen zu „grep weg“ wieder, wie die PID des Skripts, die über die zur Verfügung stehen sollte '' $$ variable – blue

+0

Dank @blue nach Antworten –

17

Haben Sie versucht, pidof ABCD zu verwenden?

+5

das ist eigentlich eine bessere Antwort für die meisten Fälle :) – blue

0

Sie diesen Befehl verwenden, können die pid eines bestimmten Prozesses & echo $ b grep pid eines laufenden Prozesses zu drucken

b = ps -ef | grep [f]irefox | awk '{ printf $2 }'

echo $ b

1

Seine sehr geradlinig . ABCD sollte durch Ihren Prozessnamen ersetzt werden.

#!/bin/bash 

processId=$(ps -ef | grep 'ABCD' | grep -v 'grep' | awk '{ printf $2 }') 
echo $processId 

Manchmal braucht man ABCD durch Software-Namen zu ersetzen. Beispiel - wenn Sie ein Java-Programm wie java -jar TestJar.jar & laufen, dann müssen Sie ABCD von TestJar.jar

+0

das hat für mich funktioniert! –

1

ps eine Option ersetzen hat dafür:

process_id=`/bin/ps -C ABCD -o pid=`