나는이 .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
있습니까?
답변
lsof
jar 파일을 인수로 사용하여 열려있는 파일이있는 프로세스를 나열하는 명령을 실행할 수 있습니다 . 적은 파일을 보는 예제 :
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
답변
전체 경로와 함께 사용되는 .jar 파일을 반환 jps
하는 -l
옵션 과 함께 사용할 수 있습니다 .
-l 응용 프로그램 기본 클래스의 전체 패키지 이름 또는 응용 프로그램 JAR 파일의 전체 경로 이름을 표시합니다.