Mam .jar
plik, który jest znany z nieprawidłowego działania. Gdy wystąpi awaria, pomaga tylko ponowne uruchomienie. Mam sposób na wykrycie tych awarii (odczytanie pliku dziennika wspomnianego .jar
) Więc chcę napisać skrypt, który zabije cały proces, gdy tylko wystąpi awaria. Problemem jest:
confus@confusion:~$ ps -A
...
4438 ? 00:00:00 java
4439 ? 00:00:00 java
4443 ? 00:00:00 java
...
Nazwa wszystkich działających .jar
s to oczywiście „java”. Jak dowiem się, który z tych procesów „java” jest tym, który chcę zabić, tj. Tym, który działa foobar.jar
?
Odpowiedzi:
Możesz uruchomić
lsof
polecenie, które pokazuje, które procesy mają otwarte pliki, z plikiem jar podanym jako argument. Przykład przeglądania pliku z mniejszą liczbą:Aby łatwo ponownie użyć pid w skrypcie, możesz uruchomić go w trybie zwięzłym:
źródło
Korzystanie
ps ax
pomoże.Wyświetli drzewo procesów w stylu BSD, który po prostu pokazuje znacznie więcej informacji.
Aby znaleźć swój konkretny proces, wystarczy grep dla nazwy JAR.
ps ax | grep JARNAME
zrobię to.źródło
Możesz to zrobić natywnie lub jeśli „lsof” nie jest zainstalowany przez / proc // fd Przykład:
źródło
Można korzystać
jps
z-l
opcji, które zwróci plik .jar używane z pełną ścieżką.źródło