LINUX

Comando de espera en Linux con ejemplos

el comando de espera de linux

Wait es un comando de shell que espera a que se complete algún proceso y luego devuelve el estado de salida. El comando Esperar se utiliza para esperar un ID de proceso y un ID de trabajo específicos y devolver su estado de finalización.

Cuando ejecutamos el flujo de automatización grande, necesitamos crear algunos módulos, esperar hasta que se complete el conjunto anterior de módulos y devolver los datos ingresados ​​en los siguientes módulos, en este caso podemos usar el comando Esperar hasta que se complete el módulo anterior.

Cómo funciona el comando de espera

El comando Wait utilizado para monitorear el proceso anterior depende del estado de retorno del proceso anterior, devolverá el estado de salida. Por ejemplo, si queremos esperar a que se complete un determinado proceso ID 13245, entonces debemos usar «esperar 13245» cuando el comando de espera completo del proceso 13245 devuelve los valores de retorno del estado de salida 13245.

– esperar PID (PID – ID de proceso de un comando, para el cual la utilidad va a esperar a que se complete).
– JID de espera (JID: ID de trabajo que identifica un proceso en segundo plano para esperar, aplicable solo para invocaciones de espera en el entorno de ejecución de shell actual).

El valor del estado de salida del comando de espera depende del último PID/JID especificado. Cuando cualquier proceso termina de manera anormal, el estado de salida será mayor que 128.

Espere a que el comando salga con el valor 0 cuando se llama sin un proceso secundario y todos los ID de proceso son conocidos por el shell actual, están terminados. Si el comando de espera detecta algún error, devuelve cualquier valor del 1 al 126. Si se desconoce el ID del último proceso, el comando de espera devuelve el valor 127.

Esperar ejemplos de comandos

Revisemos algunos scripts para comprender cómo funciona el comando de espera.

Ejemplo 1 – Script con el comando Esperar

Tenemos dos scripts llamados «foo.sh» y «bar.sh». Imprima números del script «Foo.sh» entre 1 y 5 y el script «bar.sh» llamará a foo.sh y lo ejecutará en segundo plano, obtenga el PID de foo.sh y espere a que se complete, una vez que complete , iniciará el ciclo «bar.sh» y terminará.

El guión – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Guión – bar.sh

#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
pid=$!
wait $pid
echo “Completed foo.sh”

for I in 1 2 3 4 5
do
        echo “bar.sh – Looping … number $i”
done

Resultado

Started bar.sh
Started foo.sh
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$

Ejemplo 2 – Script sin comando de espera

Tenemos dos scripts llamados «foo.sh» y «bar.sh». El script «foo.sh» imprime números entre 1 y 5 y el script bar.sh llamará a foo.sh y lo ejecutará en segundo plano, pero no esperará a que foo.sh termine y ejecute ambos scripts.

El guión – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Guión – bar.sh

#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
echo “Completed foo.sh”

for I in 1 2 3 4 5
do
        echo “bar.sh – Looping … number $i”
done

Resultado

Started bar.sh
Started foo.sh
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
$

Ejemplo: 3 – Script con comando de espera y estado de retorno

El script «bar.sh» llamará a foo.sh y lo ejecutará en segundo plano, obtendrá el PID de foo.sh y esperará a que se complete, una vez que se complete, iniciará el bucle bar.sh y se completará, luego devolverá el código de salida del script foo.sh.

Guión – foo.sh (Estado de salida = 0)

Guión – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Guión – bar.sh

#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?

if [ $stat –eq 0 ]
then
       echo “Exit status - $stat”
else
        echo “Exit status - $stat”
fi

Resultado

foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Exit status - 0
$

Script – foo.sh (Estado de salida = NON Zero)

Guión – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      iiecho “foo.sh – Looping … number $i”
done

Guión – bar.sh

#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?

if [ $stat –eq 0 ]
then
       echo “Exit status - $stat”
else
        echo “Exit status - $stat”
fi

Resultado

./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
Exit status – 127
$

Conclusión

Wait y Sleep son llamadas al sistema basadas en el tiempo en el sistema operativo. Veamos la diferencia entre los comandos de espera y suspensión.

Espera: cuando el usuario desea detener el proceso actual y libera todos los recursos que posee el proceso y espera a que se ejecute otro proceso. Necesitamos usar notificar para que este proceso sepa que comienza a ejecutarse nuevamente cuando se completa otro proceso.

Suspender: esta llamada al sistema se utiliza cuando el usuario desea detener el proceso actual durante un período de tiempo. Mantiene el bloqueo de recursos hasta que finaliza el tiempo de suspensión y vuelve a iniciar la ejecución del proceso. Aquí el proceso tiene el control durante toda la ejecución. Por ejemplo, ejecuté un comando en bash y quiero dormir por un tiempo porque esperaba un resultado del comando ejecutado, que se usará en la ejecución posterior del proceso actual.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar