MyApp.jar
예를 들어 동일한 파일 이름으로 실행되는 두 개의 Java 프로세스가 있습니다 .
/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
그러나 이것은 나에게 약간 잘못된 것 같습니다. 더 좋은 방법이 있나요?
답변1
첫 번째,왜 그들 중 하나를 죽이겠습니까?프로세스가 너무 많은 리소스를 사용하는 경우 다음에서 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
답변2
매개변수를 변경하면 애플리케이션에 영향을 미치므로 최선의 방법은 아닙니다. 프로그램 이름 자체인 $0을 변경할 수 있습니다. 대부분의 프로그램은 이에 대해 신경 쓰지 않지만 일부는 이에 따라 동작을 변경합니다(예: mtools 및 busybox를 사용하여 IIRC와 같이 다른 이름으로 동일한 바이너리를 호출할 수 있는 경우).
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와 추가 정보(프로세스 구별을 위해)를 로그 파일에 기록하는 래퍼 스크립트를 사용하여 프로세스를 시작합니다.
답변3
도움이 되는 유일한 방법은 더 높은 PID 번호를 결정하는 것입니다. PID 번호가 클수록 나중에 실행되는 프로세스입니다.하지만 항상 그런 것은 아니다