У java service wrapper есть функциональность watchdog, которая перезапускает JVM в случае зависания. stdout и stderr пишутся в ротируемые логи. Это первое что приходит на ум. А если ОС windows или solaris?
Тот же враппер есть и под Windows, по-умолчанию конфигурируется в pom.xml "windows-x86-32".
Плюс нет необходимости в самой программе следить в разных платформах, что запущен только один ее процесс, это есть «из коробки».
Я вас не переубеждаю, каждый использует то что ему удобно. Лично мне так проще, так же как и разработчикам Nexus, Sonar и т.п.
В солярисе я не специалист, но сколько раз сталкивался на работах с устаревшими серверами на solaris, каждый раз без проблем использовал java service wrapper.
Когда пытался решить штатными средствами запуск одного процесса в приложении, в том же jruby на solaris не работал file lock.
1) В директории logs создается файл launcher.pid (или как назвали свойство «launcher-name») создается при старте;
2) «wrapper.signal.mode.hup» поведение конфигурируется.
Как вариант проприетарные sun.misc.Signal и sun.misc.SignalHandler или addShutdownHook, как указывал в публикации(и жди себе, пока не прийдет SIGKILL).
Мы используем spring-boot и systemd для этих целей. systemd вообще оказалось очень просто — никаких сложных скриптов, конфиг-файл для сервиса занимает 5-10 строк.
Превращаем Java/JVM приложение в демона