【问题标题】:linux script to kill java processlinux脚本杀死java进程
【发布时间】:2012-11-22 14:34:28
【问题描述】:

我想让 linux 脚本杀死控制台上运行的 java 程序。

以下是作为jar运行的进程。

[rapp@s1-dlap0 ~]$ 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
[rapp@s1-dlap0 ~]$

【问题讨论】:

  • pkill java 算不算?

标签: linux bash kill-process


【解决方案1】:

您可以像这样简单地使用pkill -f

pkill -f 'java -jar'

编辑:要终止运行特定 jar 的特定 java 进程,请使用此基于正则表达式的 pkill 命令:

pkill -f 'java.*lnwskInterface'

【讨论】:

  • 是的,您也可以添加 jar 名称。
  • 现在我在 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 如果我这样做 pkill -f 'java -jar' 它不起作用。我可以使用如下通配符 pkill -f 'java *-jar' 吗?
  • 您可以使用:pgrep -if 'java .*-jar'
  • 你很有帮助,我很感激你,还有最后一个问题,当我尝试 pkill -f 'java.*$app' 时导出变量 $app=lnwskInterface 没有成功。提前感谢您的帮助
  • 尝试使用双引号,如下所示:pkill -f "java.*$app"
【解决方案2】:

如果您只想杀死任何/所有 java 进程,那么您只需要;

killall java

但是,如果您想特别终止 wskInterface 进程,那么您已经完成了大部分工作,您只需要去掉进程 ID;

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

应该这样做,不过可能有更简单的方法......

【讨论】:

  • 看到greps 通过管道传输到awks,我总是很惊讶!!!我们可以称之为 Grep 的无用用法吗?无论如何,最好使用pkill-f 选项作为anubhava 提到的(如果你当然安装了pkill,并且如果它有-f 选项)。
  • 我试过“PID=ps -ef | grep wskInterface | awk '{ print $2 }'kill -9 $PID”,发现 -bash: kill: (10395) - 没有这样的进程。它实际上杀死了进程,但也给出了错误
  • @Faisalkhan 那是因为你试图杀死ps 进程本身...:-(。不要用这种方法,用anubhava的代替。
  • @gniourf_gniourf 我发现 grep 在过滤行时更容易一些。是的,当我输入这个方法时,我知道它有点不对劲,但它应该可以工作。而且它是胡须,我喜欢。
  • ps -ef | grep wskInterface | grep -v grep | awk '{ print $2 }' 忽略你自己的 grep 命令。
【解决方案3】:

使用jps 列出正在运行的java 进程。该命令返回进程 ID 以及主类。您可以使用 kill 命令杀死返回 id 的进程或使用以下一个衬里脚本。

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

MainClass 是您正在运行的 java 程序中的一个类,它包含 main 方法。

【讨论】:

  • @Xerus 尝试杀死 $(jps -l | grep &lt;fully.qualified.ClassName&gt; | awk '{print $1}')
  • 问题似乎是 grep。你的任何一个建议只有在我取出 grep 后才有效
【解决方案4】:

pkill -f 无论出于何种原因对我都不起作用。不管那是什么,实际上通过 ps aux 清楚地显示给我的东西似乎非常挑剔。

经过一个下午的宣誓后,我将以下内容放入我的启动脚本中:

(ps aux | grep -v -e 'grep ' | grep MainApp | tr -s " " | cut -d " " -f 2 | xargs kill -9 ) || true

【讨论】:

    【解决方案5】:

    如果有多个 java 进程并且你想用一个命令杀死它们 试试下面的命令

    kill -9 $(ps -ef | pgrep -f "java")
    

    用任何进程字符串标识符替换“java”,以杀死其他任何东西。

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 2017-01-23
      • 2013-07-24
      • 2015-06-08
      • 1970-01-01
      • 2019-12-25
      • 2016-07-08
      • 1970-01-01
      相关资源
      最近更新 更多