Coloque seu comando entre parênteses:
( tail -f z | grep 'd' ) &
kill -- -$!
Isso matará todo o subprocesso.
Aqui, especificando um PID negativo para matar, nós eliminamos todo o grupo de processos. Veja man 1 kill
:
Negative PID values may be used to choose whole process groups; see the PGID column in ps command output.
Ou man 2 kill
:
If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.
No entanto, kill -PID
só funcionará se o controle de trabalho estiver ativado em bash
(o padrão para shells interativos ). Senão, seu subprocesso não terá um grupo de processos dedicado e o comando kill falhará com kill: (-PID) - No such process
Para contornar isso, ative o controle de trabalho em bash
( set -m
) ou use pkill -P $!