我有一個C++庫,我通過JNI從Java調用。 C++代碼中存在一個偶爾會導致JVM崩潰的bug。爲了對這種崩潰保持健壯,我已經將Java程序包裝在一個shell腳本中,當它退出時重新啓動Java。大多數情況下,這種方法可行,但偶爾JVM會崩潰(將本地堆棧跟蹤打印到stderr,不能再被java調試器附加,不會消耗任何可觀的CPU時間),但不會退出,所以它不會重新啓動,直到我手動殺死它。爲什麼會發生這種情況,我能做些什麼來防止它呢?在本機代碼崩潰後,能夠保持JVM不會退出?
我在linux下運行。崩潰之後,JVM不響應SIGTERM,只響應SIGKILL。當我使用本地調試器附加到JVM進程時,我發現這些線程都被__kernel_vsyscall阻塞。