Existe uma maneira de controlar um grupo de trabalhos dentro de uma determinada sessão bash?
Sim, existe! - Use matrizes para formar os grupos e capture cada ID de processo usando $!
e anexe-a à matriz.
$!
é um parâmetro especial especificado por POSIX , que fornece o decimal ID do processo do comando de segundo plano mais recente.
Abaixo está um tutorial de como anexar matrizes no Bash e enumerá-las no contexto da sua pergunta:
Primeiro, declare as matrizes:
$ GROUP_FOO=()
$ GROUP_BAR=()
Trabalho que não está em um grupo:
$ prog1 &
Trabalho para entrar no grupo FOO (a notação +=
indica que o valor deve ser anexado à matriz):
$ prog2 &
$ GROUP_FOO+=($!)
Outro trabalho para ir no grupo FOO:
$ prog3 &
$ GROUP_FOO+=($!)
Trabalho para entrar no grupo BAR:
$ prog4 &
$ GROUP_BAR+=($!)
Para matar os processos do grupo FOO:
$ for id in ${GROUP_FOO[@]}; do kill $id; done
Versão com script
Se eu estivesse criando scripts, alteraria um pouco para que o ID do processo seja adicionado apenas à matriz, se iniciado com êxito:
prog2 & sleep 0.1; kill -0 $! && GROUP_FOO+=($!)
Dessa forma, você terá menos chances de ter IDs de processo em sua matriz que não estão sendo executados porque saíram imediatamente com um erro. O atraso de sono de 0,1 segundo (provavelmente pode ser de 0,01 segundo) dá tempo ao processo para sair com um código de erro.