2012-12-04 8 views
32

Ich möchte Linux-Skript Java-Programm auf der Konsole zu töten.Linux-Skript Java-Prozess zu töten

Im Folgenden wird der Prozess als Glas ausgeführt.

[[email protected] ~]$ ps -ef |grep java 
rapp 9473 1 0 15:03 pts/1 00:00:15 java -jar wskInterface-0.0.1-SNAPSHOT-jar-with-dependencies.jar 
rapp 10177 8995 0 16:00 pts/1 00:00:00 grep java 
[[email protected] ~]$ 
+4

zählt 'pkill java'? –

Antwort

67

Sie einfach pkill -f wie diese verwenden:

pkill -f 'java -jar' 

EDIT: Um einen bestimmten Java-Prozess ausgeführt wird, spezifische jar diese regex basiert pkill Befehl zu töten:

pkill -f 'java.*lnwskInterface' 
+1

kann ich nach Jar-Namen töten? –

+1

Ja, Sie können auch den Jar-Namen hinzufügen. – anubhava

+0

jetzt mein Glas in PS sieht aus wie rcapp 23671 1 16 11:23 pts/0 00:00:03 /usr/java/jdk1.6.0_37//bin/java -Xmx2048m -Drdc.log.file =/home/rapp /apps/LNWSKInterface/logs/dev.log -jar /home/rapp/apps/LNWSKInterface/jar/lnwskInterface.jar und wenn ich pkill -f 'java -jar' mache, funktioniert es nicht. kann ich Wildcard wie folgt verwenden: pkill -f 'java * -jar'? –

25

Wenn Sie nur irgendwelche/alle Java-Prozesse töten wollen, dann brauchen Sie nur;

killall java 

Wenn Sie jedoch den wskInterface Prozess insbesondere töten wollen, dann sind Sie die meisten des Weges dorthin, brauchen Sie nur den Prozess-ID Streifen aus;

PID=`ps -ef | grep wskInterface | awk '{ print $2 }'` 
kill -9 $PID 

Sollte es tun, gibt es wahrscheinlich ein einfacher Weg, aber ...

+0

Ich bin immer erstaunt zu sehen, grep's piped in 'awk's !!! Sollen wir diesen nutzlosen Gebrauch von Grep nennen?Wie auch immer, es ist viel besser, 'pkill' mit der Option' -f' als anubhava zu verwenden (wenn Sie 'pkill' natürlich installiert haben, und wenn es die' -f' Option hat). –

+0

Ich probierte "PID =' ps -ef | grep wskInterface | awk '{print $ 2}' ' kill -9 $ PID" und gefunden -bash: kill: (10395) - Kein solcher Prozess. es tötete den Prozess aber auch den Fehler –

+0

@Faisalkhan Das ist, weil Sie versucht haben, den 'ps' Prozess selbst zu töten ...' :-('. Verwenden Sie diese Methode nicht, verwenden Sie anubhava stattdessen. –

0

Verwenden jps laufenden Java-Prozesse aufzulisten. Der Befehl gibt die Prozess-ID zusammen mit der Hauptklasse zurück. Sie können den Befehl kill verwenden, um den Prozess mit der zurückgegebenen ID zu beenden oder nach einem Linerskript zu verwenden.

kill $(jps | grep <MainClass> | awk '{print $1}') 

Mainclass ist eine Klasse, in der Ausführung von Java-Programm, das die Hauptmethode enthält.

+0

Das gibt mir einen Syntaxfehler in der Pipe – Xerus

+0

@Xerus Versuchen Sie, '$ (jps -l | grep | awk '{print $ 1}') ' – Pawan

+0

das Problem scheint der Grep zu sein .. Einer Ihrer Vorschläge funktioniert nur, wenn ich den Grep raushole – Xerus