Esperar script: ¿Cómo manejar dos procesos?

Esperar script: ¿Cómo manejar dos procesos?

Estoy usando Expect para automatizar llamadas VoIP para realizar mediciones de calidad.

Mi secuencia de comandos llama a otro cliente VoIP una cantidad determinada de veces. Antes de manejar las llamadas, tcpdump debe detectar todos los paquetes. Mientras tcpdump ocupa la terminal, el cliente VoIP no se puede generar posteriormente. Mi script esencialmente se ve así:

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

Pensé que el operador & detrás del spawn de tcpdump lo genera en segundo plano. Sin embargo recibo el mensaje de error:

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"

¿Cómo puedo capturar los paquetes en segundo plano con tcpdump y al mismo tiempo iniciar el otro proceso y hacer las llamadas VoIP?

Respuesta1

Puede eliminar el signo comercial (&): spawnsiempre funciona de esa manera. Hay un identificador para cada canalización generada almacenado en $spawn_id global. Debe guardarlo en una variable separada después de cada generación para poder hacer referencia a cada uno con -ila bandera en los siguientes operadores expecty . sendConsulte el ejemplo relevante en la descripción de estos operadores en esperar(1).

Respuesta2

Resolví mi problema haciendo referencia al proceso con la variable $spawn_id. Mi código se ve así en las líneas 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

información relacionada