2012-08-14 11 views
5

Ich bin nur neugierig. Die Manpage für Kill sagt, dass QUIT, alias Signal # 3, ein "Kern" -Signal ist. Es scheint, dass alles, was es für Java-Prozesse tut, Dump der Thread-Informationen ist. Ist das QUIT also falsch? Ist es nur so, dass die JVM einen Singal-3-Handler implementiert, der Threads ablegt?Wie funktioniert "kill -QUIT process_id"?

+0

Ja, QUIT ist eine falsche Bezeichnung. Wie @Will sagte, hat Sun gerade beschlossen, Signal 3 die Threads zu löschen. – Gray

Antwort

7

QUIT ist wohl eine falsche Bezeichnung für Java. Aber durch dieses Argument kann jeder Signalname eine falsche Bezeichnung sein, wenn eine Anwendung das Standardverhalten des Signalhandlers ändern darf.

In Wirklichkeit war die Entsprechung zwischen UNIX-Signalnamen und dem, was sie tatsächlich tun, immer etwas vage und dürftig. Entwickler haben sich jedoch seit mehr als 30 Jahren mit diesem "Problem" beschäftigt, ohne dass dies ein echtes Problem darstellt.

Und ja, das Java-Thread-Stack-Dump-Verhalten wird von der JVM implementiert. Das Standardverhalten von UNIX/Linux besteht darin, einen Speicherauszug des Prozesses zu erstellen, sofern dies nicht durch andere Faktoren verhindert wird.

5

Ja, die JVM erfasst das # 3-Signal, um Threads zu dumpen. Standardmäßig wird für einen normalen Unix-Prozess ein Core-Speicherauszug (d. H. Eine Speicher-Momentaufnahme des Prozesses erstellt und in eine Datei geschrieben) erstellt und beendet.

Für Java ist das nicht sehr hilfreich, es wird stattdessen ein Thread-Dump ausgeführt.