Сценарий оболочки для остановки Java-программы - PullRequest
11 голосов
/ 25 января 2010

Есть ли способ остановить выполнение Java-программы с использованием сценария оболочки, зная только имя. Я использую оболочку ksh

Ответы [ 5 ]

20 голосов
/ 25 января 2010

в ответ на предложение Мнемента :

это должно сделать работу

jps -l | grep org.example.MyMain | cut -d ' ' -f 1 | xargs -rn1 kill
  • jps -l: перечислить процесс Java с «полным именем пакета для основного класса приложения или полным путем к файлу JAR приложения».

  • grep: выберите понравившийся вам процесс

  • cut -d -' ' -f 1: разделить вывод в столбцах, используя разделитель '', и вывести только первый (pid)

  • xargs -rn1 kill: выполнить kill для каждого PID (если есть)

обратите внимание, что вы должны запускать jps и xargs с тем же пользователем (или root), с которым вы запускаете процесс

6 голосов
/ 25 января 2010

Добавьте уникальное свойство в JVM, чтобы легко его идентифицировать, например для test.class

java -Duniquename=1 test

Чтобы убить его:

ps ax | grep uniquename | grep -v grep | awk '{print $1}' | xargs kill
3 голосов
/ 25 января 2010

Вы можете использовать jps, идентифицирующий идентификатор процесса, связанный с именем запущенной java-программы (jps - менеджер процессов для java-программ) С этим идентификатором вы можете нормально завершить процесс.

1 голос
/ 25 января 2010

вы можете использовать опцию -o ps для форматирования вашего вывода,

ps -eo cmd,pid | awk '!/awk/&&/mycommand/{cmd="kill -9 "$2;system(cmd)}'
1 голос
/ 25 января 2010

Вы можете использовать pkill:

pkill your_java_program_name

Это будет работать, если вы запускаете только один экземпляр вашей программы.

...