2012-12-04 98 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