java가 현재 실행중인 jar 파일 (및 PID)을 어떻게 알 수 있습니까? 파일을. 오작동이 발생하면 재시작 만

나는이 .jar고장 악명이 파일을. 오작동이 발생하면 재시작 만 도움이됩니다. 그 오작동을 감지하는 방법이 있습니다 (said의 로그 파일 읽기 .jar) 그래서 오작동이 발생할 때마다 프로세스를 종료시키는 스크립트를 작성하고 싶습니다. 문제는:

confus@confusion:~$ ps -A
...
4438 ?        00:00:00 java
4439 ?        00:00:00 java
4443 ?        00:00:00 java
...

모든 실행중인 프로세스 이름 .jar은 자연스럽게 “java”입니다. 이 “java”프로세스 중 내가 죽이고 싶은 프로세스, 즉 실행중인 프로세스를 어떻게 알 수 foobar.jar있습니까?



답변

lsofjar 파일을 인수로 사용하여 열려있는 파일이있는 프로세스를 나열하는 명령을 실행할 수 있습니다 . 적은 파일을 보는 예제 :

egil@mutter:~$ lsof foo.c
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
less    18871 egil    4r   REG    8,2        0 53862540 foo.c
egil@mutter:~$

스크립트에서 pid를 쉽게 재사용하기 위해 간결한 모드에서 실행할 수 있습니다.

egil@mutter:~$ lsof -t foo.c
18871

답변

사용 ps ax하는 데 도움이됩니다.

프로세스 트리를 BSD 스타일로 표시하여 더 많은 정보를 보여줍니다.

특정 프로세스를 찾으려면 JAR 이름을 grep하면됩니다. ps ax | grep JARNAME할 것입니다.


답변

/ proc // fd를 통해 “lsof”가 설치되지 않은 경우 또는이 고유를 수행 할 수 있습니다. 예 :

ps -ef|grep -w java
...
0c4       6917  6916  0 12:22 pts/7    00:00:00 java
...

ls -la /proc/6917/fd/
total 0
dr-x------ 2 0c4 svauser  0 Apr  2 12:23 .
dr-xr-xr-x 9 0c4 svauser  0 Apr  2 12:22 ..
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 0 -> /dev/pts/7
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 1 -> /dev/pts/7
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 2 -> /dev/pts/7
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 3 -> /opt/jdk1.8.0_191/jre/lib/rt.jar
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 4 -> /media/veracrypt1/Downloads/rr/testone.jar
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 5 -> /usr/share/java/gnu-getopt-1.0.14.jar