Я видел, что java не отключился должным образом в этом случае, и стал владельцем init (pid 1).Я исправил это в прошлом, записав pid процесса java после его запуска, а затем отправив kill -15 в обработчик сигнала внутри скрипта bash.
jpid=
trap_intr()
{
[ ! -z "$jpid" ] && kill $jpid
}
trap trap_intr INT TERM
java -cp ... foo &
jpid=$!
wait
ОБНОВЛЕНИЕ: Я забылпоместите java-процесс в фоновый режим, и скрипт bash будет ждать $!