Есть ли способ остановить java-программу, запущенную с помощью оболочки script, зная только имя. Я использую оболочку ksh
Shell script, чтобы остановить программу java
Ответ 1
Добавьте уникальное свойство JVM, чтобы легко идентифицировать его, например. для test.class
java -Duniquename=1 test
Чтобы убить его:
ps ax | grep uniquename | grep -v grep | awk '{print $1}' | xargs kill
Ответ 2
после Предложения Mnementh:
это должно выполнить задание
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) при запуске процесса
Ответ 3
Вы можете использовать jps, идентифицирующий идентификатор процесса, связанный с именем запущенной java-программы (jps - это менеджер процессов для java-программ). С помощью этого id вы можете нормально убить процесс.
Ответ 4
Вы можете использовать pkill:
pkill your_java_program_name
Это будет работать, если вы запустите только один экземпляр вашей программы.
Ответ 5
вы можете использовать опцию -o ps для форматирования вывода,
ps -eo cmd,pid | awk '!/awk/&&/mycommand/{cmd="kill -9 "$2;system(cmd)}'