2012-12-04 139 views
32

我想用linux腳本殺死在控制檯上運行的java程序。linux腳本殺死java進程

以下是以jar形式運行的進程。

[[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

'pkill java' count? –

回答

67

您可以簡單地使用pkill -f這樣的:

pkill -f 'java -jar' 

編輯:要殺死一個特定的Java進程中運行你的具體罐子使用正則表達式基於pkill的命令:

pkill -f 'java.*lnwskInterface' 
+1

我可以用罐子名稱殺死嗎? –

+1

是的,你也可以添加jar名稱。 – anubhava

+0

現在我在ps中的jar看起來像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,如果我做了-k'ja​​va -jar'它不起作用。我可以使用通配符,如下所示pkill -f'java * -jar'? –

25

如果你只是想殺死任何/所有的java進程,那麼你所需要的只是;

killall java 

但是,如果你想殺死特別是wskInterface過程,那麼你最那裏的方式,你只需要去掉的進程ID;

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

應該這樣做,有可能是雖然一個更簡單的方法...

+0

我總是很驚訝地看到'grep's輸入'awk's !!!我們可以稱之爲無用的Grep嗎?無論如何,使用'-f'選項時,使用'pkill'好像anubhava提到的那樣(如果你有'pkill'安裝,當然也可以使用'-f'選項)。 –

+0

我試過「PID ='ps -ef | grep wskInterface | awk'{print $ 2}'' kill -9 $ PID」 並找到-bash:kill:(10395) - 沒有這樣的進程。它實際上殺死了這個過程,但也給了錯誤 –

+0

@Faisalkhan這是因爲你試圖殺死'ps'過程本身...':-('。不要使用這個方法,而是使用anubhava的。 –

0

使用jps列出運行Java程序。該命令與主類一起返回進程ID。您可以使用kill命令來終止使用返回的id的進程或使用以下一個班輪腳本。

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

MainClass是運行java程序中的一個類,它包含main方法。

+0

這給了我一個管道上的語法錯誤 – Xerus

+0

@Xerus嘗試kill'$(jps -l | grep | awk'{print $ 1}')' – Pawan

+0

這個問題似乎是grep。你的任何建議只有在我拿出grep – Xerus