É 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
.