Уникальная идентификация 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 

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

Во-первых, почему вы хотите убить любого из них? Если процесс использует слишком много ресурсов, вы можете просто получить 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. Чем больше это более поздний запущенный процесс. НО НЕ ВСЕГДА