2012-02-13 10 views
5

Jeśli tak, to w jaki sposób mogę się dowiedzieć, który to proces (spośród wszystkich pozostałych w systemie) i jak mogę go zabić, aby jego zamykanie zostało wykonane?Czy jest możliwe, aby proces java w jednym jvm zabił/zatrzymał inny proces java w innym jvm?

Powód Chcę to zrobić, ponieważ chcę zaimplementować coś takiego jak początek Apache, przystanek Apache, po którym po wywołaniu Apache Start lub przystanku Apache, proces serwera rozpoczyna się lub zatrzymuje w tle i otrzymuję polecenie lub zachęta bash z powrotem ; to powinno działać zarówno na systemie Linux, jak i na Windowsie.

Odpowiedz

2

U może pomyśleć o otwarciu usługi po stronie sługi, która jest dla samej siebie, do obsługi przez aplikację master.

Z drugiej strony, jeśli nie chcesz tego robić, musisz znaleźć sposób na wywołanie procesów instancji jvm. Jeśli chcesz tylko zabić jvm, byłoby to łatwe, ale w przypadku konkretnego procesu. U potrzebuje pomocy myślę tak:

link

Nadzieję, że pracuje u

+0

Myślałem o rzeczach z gniazdem, ale zdecydowałem się na to, ponieważ serwer byłby raczej ryzykowny, aby ujawnić inne gniazdo światu, w którym każdy może wysłać fałszywą wiadomość (nawet z włączonym SSL), chyba że oczywiście gniazdo nasłuchuje tylko połączeń z hosta lokalnego, a nie przez sieć, czy to możliwe? – shawn

+0

Oczywiście jest to możliwe. U możesz zdefiniować uprawnienia dla swojej aplikacji głównej do zapory sieciowej i zapobiec atakowaniu systemu. Poza tym myśl o tym, że mogę zamknąć aplikację w samej aplikacji, jest dobrym pomysłem. – Neron

4

Jest to możliwe, ale będzie to specyficzny system operacyjny. W maszynie JVM nie ma niczego, co automatycznie daje dostęp do zabijania innych maszyn wirtualnych.

Musisz albo zadzwonić do komendy systemu operacyjnego kill (lub odpowiednika) lub napisać natywny kod.

Można to zrobić, a jeśli zamierzasz działać tylko na systemach uniksowych, najlepszym rozwiązaniem byłoby napisanie skryptu powłoki, który wykona to, co chcesz, a następnie wykonanie go przy pomocy ProcessBuilder i przyjaciół.

0

Myślę, że możesz używać JMX.

Możesz uruchomić serwer JMX w swoim procesie java i otworzyć niektóre API, takie jak start i stop.

Dzięki JMX nie musisz niczego implementować na temat gniazd i uprawnień. Musisz tylko podać funkcję wywoływaną przez zdalny z JMX. Możesz również ustawić użytkownika i hasło dostępu.

Powiązane problemy