Se eu entendi sua pergunta corretamente, a resposta é que você não pode fazer isso. O programa java inicia, chama um script de shell que inicia mais processos. Em seguida, o script de shell termina e você deseja que o controle seja passado para o processo java, que deve ser capaz de encerrar todos os outros processos.
A resposta curta é que você não pode fazer isso. Quando o script de shell morre, todos os processos iniciados por ele são propriedade do processo número 1 (init) e não do processo java.
Existe uma razão pela qual você está usando o script de shell para iniciar os processos extras?
Por que não apenas usar o java para iniciar todos os processos (usando as bibliotecas do Process), ou usar algo como o supervisord ( link ). Você pode controlar o supervisord para iniciar / parar processos a partir do programa java.
Se todos os processos são nomeados da mesma forma, você também deve poder usar o comando killall para matá-los pelo nome.