2012-08-14 8 views
5

Jestem po prostu ciekawy. Strona man dla kill mówi, że QUIT, czyli sygnał nr 3, jest "rdzeniem". Wydaje się, że wszystko, co robi, dla procesów Java, zrzuca informacje o wątku. Czy zatem WYCOFANIE jest mylące? Czy po prostu JVM implementuje singal 3 handler, który zrzuca wątki?Jak działa "kill -QUIT process_id"?

+0

Tak, QUIT jest mylące. Jak powiedział @Will, Sun właśnie zdecydował, aby sygnał 3 zrzucił wątki. – Gray

Odpowiedz

7

QUIT to prawdopodobnie Mylna nazwa dla Javy. Ale ten argument może być mylący, jeśli aplikacja może zmienić domyślne zachowanie procedury obsługi sygnału.

W rzeczywistości zgodność między nazwami sygnałów UNIX a tym, co faktycznie robią, zawsze była nieco niejasna i niepewna. Jednak deweloperzy zajmują się tą "kwestią" przez 30 lat, nie będąc prawdziwym problemem.

I tak, zachowanie zrzutu stosu wątku Java jest realizowane przez maszynę JVM. Domyślnym zachowaniem UNIX/LINUX jest utworzenie zrzutu pamięci procesu, chyba że jest to hamowane przez inne czynniki.

5

Tak, JVM przechwytuje sygnał # 3, aby zrzucić wątki. Domyślnie, dla normalnego procesu unix, zrzuca on rdzeń (tj. Wykonuje migawkę pamięci procesu i zapisuje go do pliku) i kończy działanie.

Dla języka Java nie jest to zbyt pomocne, więc zamiast tego robi zrzut wątku.

Powiązane problemy