Encontrei parte da resposta nesta postagem sobre estouro de pilha .
Para resumir, tcpdump
estava armazenando em buffer sua saída antes de gravar no arquivo de saída, e isso causou problemas quando o script tentou interrompê-lo. Adicionar a opção -U
("flush") a tcpdump
corrige isso.
Também foi necessário um comando sleep
imediatamente depois de emitir tcpdump
para permitir que ele inicializasse, e também antes de eliminá-lo, para permitir que ele gravasse no arquivo:
#!/bin/bash
#start a process in the background (it happens to be a TCP HTTP sniffer on the loopback interface, for my apache server):
tcpdump -U -i lo -w dump.pcap 'port 80' &
sleep 5
#.....other commands that send packets to tcpdump.....
#now interrupt the process. get its PID:
pid=$(ps -e | pgrep tcpdump)
echo $pid
#interrupt it:
sleep 5
kill -2 $pid
Para referência, de man tcpdump
, na opção -U
:
Depois disso, o script funcionou bem.