Чтобы ответить на вторую часть вашего вопроса, JVM всегда завершается, когда не запущены потоки, не являющиеся демонами. Или, проще говоря, когда ваше приложение «выполнено» и метод main
завершается, не оставляя потоков в фоновом режиме, JVM завершает работу.
Это верно независимо от того, запускаете ли вы процесс Java самостоятельно с рабочего стола / командной строки или запускаете его с помощью Runtime.exec()
(что в целом эквивалентно). Поэтому, когда ваш расчет Pi завершается, он отключает JVM, который вы породили, и когда ваша исходная программа завершает работу, ее JVM также завершает работу.
Хотя я полностью согласен с Брайаном в этом, я не вижу преимущества запуска приложения Java как отдельного процесса, когда вы сможете просто запустить его в исходной JVM (за исключением некоторых действительно необычных вещей, таких как настройка). изящество или близость процессора к различным процессам).