Уникальная идентификация Java-процессов с тем же именем

У меня есть два java-процесса, которые запускаются с использованием одного и того же имени файла MyApp.jar (например).

 /usr/java/latest/bin/java -jar MyApp.jar 

Эти банки существуют в разных местах и ​​используют разные конфигурации.

Я хочу уметь убивать один процесс, но не знаю, как отличить их. Я выполняю:

  ps aux | grep [M]yApp.jar 

И получить:

 admin 21509 0.8 0.1 1199908 20484 ? Sl 08:21 0:00 /usr/java/latest/bin/java -jar MyApp.jar admin 21585 6.7 0.1 1199764 20084 ? Sl 08:21 0:00 

Я думал о создании процесса с помощью некоторого фиктивного параметра, чтобы иметь возможность отличать их:

 /usr/java/latest/bin/java -jar MyApp.jar MyAppTheFirst 

а также

 /usr/java/latest/bin/java -jar MyApp.jar MyAppTheSecond 

Но это кажется мне немного неправильным. Есть ли способ лучше?

3 Solutions collect form web for “Уникальная идентификация Java-процессов с тем же именем”

Во-первых, почему вы хотите убить любого из них? Если процесс использует слишком много ресурсов, вы можете просто получить PID top :

 top -n 1 

Если их необходимо перезапустить на периодической основе или отреагировать на внешние стимулы, используйте управление процессами :

 while true do java -jar MyApp.jar & my_app_pid=$! while ! whatever_makes_me_think_my_app_should_be_restarted do sleep 60 done kill $my_app_pid done 

Изменение параметров влияет на приложение, поэтому это не лучшая идея. Вы можете изменить $ 0, т. Е. Само название программы. Большинство программ не заботятся об этом, но некоторые меняют свое поведение на основе этого (например, если вы можете назвать тот же двоичный файл разными именами, такими как IIRC с mtools и busybox):

 bash -c 'exec -a mysleep sleep 100' ps aux | grep sleep hl 20818 0.0 0.0 5732 576 pts/10 S+ 10:01 0:00 mysleep 100 

или вы используете среду:

 bash -c 'IDSTRING=PROC1 exec sleep 100' PID=20936 tr '\0' '\n' </proc/"$PID"/environ | grep IDSTRING IDSTRING=PROC1 

или вы запускаете процесс с помощью сценария оболочки, который записывает PID и дополнительную информацию (для разметки процессов) в файл журнала.

Единственный способ, который может помочь, – определить большее число PID. Чем больше это более поздний запущенный процесс. НО НЕ ВСЕГДА

  • Как получить список длинных процессов, соответствующих определенному шаблону?
  • Как указать, какие имена полей отображаются в списках?
  • Подсчитайте общее количество подпроцессов (рекурсивно), порожденных командой
  • Завершение скрипта оболочки bash, работающего в фоновом режиме
  • UNIX-, BSD-, GNU-опции в команде ps для Linux. Откуда они?
  • Понимание «vncserver -list» в отношении процессов Xvnc
  • Получает ли этот диспетчер процесс зомби?
  • Разница между процессом ps httpd и процессом deamon httpd
  • команда «ps» зависает
  • Разница между free -m и ps -euf
  • Математическое соединение между SZ RSS и VSZ в ps o / p?
  • Interesting Posts

    Как полностью удалить беспроводной интерфейс (и повторно добавить его)?

    Определите, установлен ли (NTFS) диск или нет. Если нет, то установите его

    Установка OpenBSD на компьютере под управлением Linux

    RHEL 6.1 yum зависает на «Обновление репозиториев Red Hat».

    Подведение общих строк в разных файлах

    $ (tail) в переменную удаления \ n

    Книга по дизайну ОС Linux?

    Киви производит огромные initramfs

    Попытка понять iostat для простого последовательного чтения

    Как узнать менеджер файлов по умолчанию в терминале?

    Почему ddrescue не использует полную пропускную способность?

    Любой Linux Distros, который может хорошо работать с Intel 965gm gpu?

    Установка новой операционной системы, такой как FreeBSD с загрузкой PXE?

    Ошибка сети с несколькими параллельными контейнерами докеров

    Графическое исправление ошибок? Исправленный файл op оставил тень «почти drag-n-drop» файла, как его удалить?

    Linux и Unix - лучшая ОС в мире.