Você pode suspender apenas awk
e liberar o tubo que está lendo antes de reiniciá-lo. Nos sistemas baseados em Linux e com o GNU dd
:
Em que $pid
é o PID de awk
:
kill -s STOP "$pid"
para pará-lo e
dd iflag=nonblock if="/proc/$pid/fd/0" > /dev/null; kill -s CONT "$pid"
para retomar.
Supondo que o pipe não ficou cheio (64KiB por padrão no Linux), caso contrário, tail
poderia ter sido bloqueado também. Para contornar isso você poderia liberar o tubo com:
socat -T0.2 -u "/proc/$pid/fd/0" /dev/null
Isso limparia o que está no canal e continuará lendo até que não haja mais 0,2 segundos para permitir que tail
fique em dia com o que ainda não leu no arquivo.