É kill -- -"$pgid" , ou seja, tem que ser um id de grupo grupo . kill -- -"$$" só funcionaria se o shell fosse o líder do grupo de processos, o que não ocorre ao executar com sudo de um shell interativo:
$ sudo bash -c 'ps -j; exit'
PID PGID SID TTY TIME CMD
26786 26786 29719 pts/39 00:00:00 sudo
26794 26786 29719 pts/39 00:00:00 bash
26795 26786 29719 pts/39 00:00:00 ps
sudo é o líder do grupo de processos, não bash .
Então, você precisa fazer kill -- -"$(ps -o pgid= -p "$$")" ou simplesmente:
kill 0
Qual é o comando para matar seu próprio grupo de processos.
Em qualquer caso, isso é apenas uma coisa válida se seu script for chamado por conta própria a partir de um shell interativo (que executa o controle de tarefas).
Observe também que em:
(the-script; echo "$?")
Ou:
the-script | cmd
A subshell no primeiro caso ou cmd é a segunda também é colocada no mesmo grupo de processos, então seria morta também por esse kill 0 .