Esperar script: como lidar com dois processos?

2

Estou usando o Expect para automatizar chamadas VoIP para medições de qualidade.

Meu script está chamando outro cliente VoIP por um determinado período de tempo. Antes de as chamadas serem tratadas, o tcpdump deveria farejar todos os pacotes. Enquanto o tcpdump ocupa o terminal, o cliente VoIP não pode ser gerado depois. Meu script essencialmente se parece com isso:

set count [lindex $argv 0]   //amount of calls that the VoIP should do
spawn tcpdump -i eth2 -s 0 -w dump1.pcap &
for {set i 1} {$i <= $count} {incr i 1} {
   spawn ./pjsua --config-file=config.txt   //starting VoIP client
   expect "Make call: "
   send "sip:[email protected]\r"   //starting the VoIP call
   sleep 30
   send "h\r"   //stopping the call
   send "q\r"   //closing the VoIP client
   close        //closing the spawned process
}
interact

Eu pensei que o & operador atrás do spawn do tcpdump o gera em segundo plano. No entanto, recebo a mensagem de erro:

send: spawn id exp7 not open
while executing
"send "\r""
invoked from within
"for {set i 1} {$i <= $count} {incr i 1} {
   spawn ./pjsua --config-file=config.txt"

Como posso capturar os pacotes em segundo plano com o tcpdump e ao mesmo tempo iniciar o outro processo e fazer as chamadas VoIP?

    
por timolemow 14.10.2014 / 18:55

2 respostas

3

Você pode remover o "e" comercial (&): spawn sempre funciona dessa maneira. Há um identificador para cada pipeline gerado armazenado em $ spawn_id global. Você precisa salvá-lo em uma variável separada após cada spawn para poder referenciar cada um com -i flag nos seguintes operadores expect e send . Veja o exemplo relevante na descrição desses operadores em espera (1) .

    
por 14.10.2014 / 19:19
2

Eu resolvi meu problema referenciando o processo com a variável $ spawn_id. Meu código se parece com isso nas linhas relevantes:

spawn sudo tcpdump -i eth2 -s 0 -w $date/$dumpname
set tcpID $spawn_id
[...]
spawn ./pjsua --config-file=config
[...]
set pjID $spawn_id
send -i $pjID "\r"
[...]
close
close -i $tcpID
    
por 17.10.2014 / 11:45