11

有没有办法通过只知道名称来停止使用 shell 脚本运行的 java 程序。我正在使用 ksh shell

4

5 回答 5

20

跟进Mnementh 的建议

这应该做的工作

jps -l | grep org.example.MyMain | cut -d ' ' -f 1 | xargs -rn1 kill
  • jps -l: 使用“应用程序主类的完整包名或应用程序 JAR 文件的完整路径名”列出 java 进程。

  • grep: 选择你喜欢的过程

  • cut -d -' ' -f 1:使用分隔符''将输出拆分为列并仅打印第一个(pid)

  • xargs -rn1 kill: 对每个 PID 执行 kill (如果有的话)

请注意,您必须在运行进程时使用相同的用户(或 root)运行 jps 和 xargs

于 2010-01-25T11:43:55.023 回答
6

向 JVM 添加一个唯一属性以轻松识别它,例如 test.class

java -Duniquename=1 test

杀死它:

ps ax | grep uniquename | grep -v grep | awk '{print $1}' | xargs kill
于 2010-01-25T11:33:28.543 回答
3

您可以使用 jps 标识与已启动的 java-program 的名称相关联的 process-id(jps 是 java-programs 的 process-manager)。使用此 ID,您可以正常终止该进程。

于 2010-01-25T11:30:01.187 回答
1

您可以使用 pkill:

pkill your_java_program_name

如果您只运行正在运行的程序的一个实例,这将起作用。

于 2010-01-25T11:28:15.043 回答
1

您可以使用 ps 的 -o 选项来格式化输出,

ps -eo cmd,pid | awk '!/awk/&&/mycommand/{cmd="kill -9 "$2;system(cmd)}'
于 2010-01-25T14:32:43.887 回答