Sto eseguendo un server Middleman (che utilizza Webrick) su JRuby all'interno di un processo JVM utilizzando l'API org.jruby.embed.ScriptingContainer
.Come posso chiudere in modo pulito un JRuby incorporato in risposta a un SIGTERM per il processo JVM?
Se arresto correttamente e interrompo il server dall'interno della JVM, tutto funziona come previsto.
Ma se invio un SIGTERM al processo JVM (ad esempio, premendo ctrl + C alla riga di comando), la console ritorna ma il processo JVM non termina - si blocca indefinitamente finché non lo mando un SIGKILL .
Ho provato a registrare un hook di arresto JVM per terminare l'istanza ScriptingContainer
, ma il gancio non si attiva mai. Non sono sicuro del perché ... forse JRuby sta ingoiando il SIGTERM in qualche modo?
Come è possibile arrestare la JVM fino in fondo, in modo pulito, anche se contiene un server Webrick in esecuzione?
Hai verificato che il problema è JRuby, forse scambiando 'ScriptingContainer' per un'implementazione non-nulla di [' org.jruby.embed.EmbedRubyInstanceConfigAdapter'] (http://javadox.com/org.jruby/jruby -completo/1.7.13/org/jruby/embed/EmbedRubyInstanceConfigAdapter.html) e vediamo se il problema persiste? – durron597
Control-C non invia SIGTERM, invia SIGINT – rghome
Quale sistema operativo si utilizza? Potresti fornire un dump di thread della JVM dopo aver premuto ctrl + c? (esegui 'jstack') Come si controlla se il gancio di arresto si attiva? –