outer &
cria uma subchave. $!
fornece o PID deste subnível.
tail -f /dev/null
é um filho desse subshell, então ele tem um PID diferente. Mas você pode fazer
exec tail -f /dev/null
em vez disso. Então o kill
atinge o tail
.
Outra possibilidade é usar /bin/kill
em vez do shell embutido. Com um número negativo como argumento, você pode matar todo o grupo de processos:
/bin/kill -TERM -$!