Pytanie Jak mogę ustawić nazwę procesu dla programu Java? [duplikować]


To pytanie już zawiera odpowiedź:

Jeśli program Java jest uruchomiony, dostaje on systemową kontrolę procesu - nazwę java. Wiele programów Java jest w ten sposób trudnych do odróżnienia. Byłoby miło, jeśli istnieje, ustawić nazwę, która pojawi się w monitorze procesu. Jestem świadomy, że może to działać inaczej w różnych systemach operacyjnych.

Prostym sposobem byłoby, gdyby interpreter java obsługiwał przełącznik, aby ustawić nazwę, na przykład:

java -processname MyProgram -jar MyProgram

Ale nie mogłem znaleźć takiego przełącznika, więc prawdopodobnie nie istnieje. Interfejs API w Javie, który ustawiłby nazwę procesu, również byłby w porządku.

Więc masz jakieś sugestie?


52
2018-06-29 08:47


pochodzenie




Odpowiedzi:


Nie wiem, czy jest to możliwe, ale można użyć narzędzia wiersza poleceń, które jest dostarczane z JDK o nazwie "jps". To jest jak * nix ps, ale zamiast tego tylko programy Java. jps -v pokazuje wszystkie argumenty przekazane do java.

Ponadto widziałem ludzi dołączających "proces nazwy" do ich procesów java, dodając nieużywane -Dmyprocessname do argumentów.


43
2018-06-29 08:53



Nie dokładnie odpowiedź na to pytanie, ale dokładnie odpowiedź na mój problem. Dzięki. :-) - Mnementh
Z powodu braku ustawionego napisu jest to sprytne rozwiązanie. Sława. - synthesizerpatel
Szukam również podobnych opcji. Ale ta odpowiedź nie jest dla mnie jasna. Czy ktoś może mi wyjaśnić, jak ustawić nazwę procesu? Widziałem opcję o nazwie "-D <nazwa> = wartość". Czy potrzebujemy skorzystać z tej opcji? Dzięki. - Naresh
+1 dla pomysłu -D, nie jest dużo szybsze ani prostsze - jsh
Wydaje się, że nie działa to w systemie Windows. Jakie jest prawidłowe polecenie? - Yster


jak @omerkudat powiedział:

jps -v

wypisuje wszystkie procesy java {processID, lista params} Jeśli lista parametrów nie jest wystarczająca do rozpoznania potrzebnych aplikacji, spróbuj dodać kilka fałszywych parametrów podczas ich uruchamiania:

java -Dname=myApp -cp  myApp.jar some.client.main.MainFrame

To będzie drukować jak:

7780 MainFrame -Dname=myApp

i możesz użyć ID procesu, aby go zabić / monitorować.


17
2017-10-10 09:01





Możesz to zrobić za pomocą LD_PRELOAD shim: https://github.com/airlift/procname

Shim po prostu wywołuje specyfikę Linuksa prctl() kiedy proces się rozpocznie:

static void __attribute__ ((constructor)) procname_init()
{
   prctl(PR_SET_NAME, "myname");
}

Wywołanie musi nastąpić w głównym wątku, więc nie można tego zrobić z poziomu Javy lub nawet agenta JVMTI, ponieważ dzieje się to w innym wątku.


10
2018-03-05 23:57



Działa to naprawdę dobrze i jest prostszym podejściem niż większość tutaj - Dirk Conrad Coetsee
Rozważę użycie tego kodu, jeśli kod jest licencjonowany w ramach MIT, Apache lub innej takiej umowy licencyjnej. - Travis Spencer
Ten kod jest tak trywialny (wywołuje tylko jedną funkcję), że nawet nie wydaje się być objęty prawem autorskim. Traktuj to jako własność publiczną. Jeśli chcesz, mogę dodać plik LICENCJI. - David Phillips


Kiedy po raz pierwszy to przeczytałem, pomysł zmiany nazwy procesu wydał mi się niemożliwy. Jednak według to starożytna nitka na forum słońca możesz użyć wrapperów C ++ wokół pliku wykonywalnego JVM, aby to osiągnąć.

Szczerze mówiąc, zastanawiam się, jaki jest twój prawdziwy problem, ponieważ domyślam się, że istnieje bardziej standardowe rozwiązanie, a następnie próba zmiany nazwy procesu.


5
2018-06-29 08:57



Gdybyś musiał zabić swoją aplikację i uruchomił kilka aplikacji Java, byłby to mały hit. - Lloyd
Masz rację, polecenie jps wymienione przez omerkudat rozwiązuje problem bez zmiany nazw procesów. - Mnementh
Tworzenie małego rodzimego opakowania JNI do uruchomienia aplikacji jest również bardzo łatwe. Dla tych z nas, którzy wdrażają system Windows, pozwala to na automatyczną konfigurację JVM, niestandardowych ikon itp. ... To naprawdę nie jest trudne. - Kevin Day


Twoja najlepsza opcja to coś takiego jak launch4j    http://launch4j.sourceforge.net/

W bugtrackerze słońca jest błąd, ale nie jest to wysoki priorytet    http://bugs.sun.com/view_bug.do?bug_id=6299778


4
2018-03-30 06:56





Jeśli chcesz użyć innej nazwy procesu, musisz utworzyć własny plik binarny, aby uruchomić aplikację Java za pomocą czegoś podobnego JSmooth.

Spójrz na to pytanie do dyskusji na temat tworzenia takich plików binarnych.


2
2018-06-29 08:53





Wynika to z tego, że aplikacje Java nie są faktycznie możliwe do uruchomienia, ponieważ są uruchamiane przez wirtualną maszynę Java, dlatego java pojawia się w monitorze procesu, jest to host aplikacji.

Jednak takie rzeczy jak LimeWire, ale myślę, że to bardziej do GCJ - http://gcc.gnu.org/java/


1
2018-06-29 08:51