GNU/Linux >> Tutoriales Linux >  >> Linux

Comando de espera en Linux con ejemplos

Wait es un comando de shell que espera a que se complete un proceso determinado y luego devuelve su estado de salida. El comando de espera se utiliza para esperar un ID de proceso o un ID de trabajo en particular y devolver su estado de terminación.

Al ejecutar el gran flujo de automatización, necesitamos hacer que algunos módulos deban esperar hasta que se complete el conjunto anterior de módulos y devolver los datos canalizados a los siguientes módulos, en este caso podemos usar el comando Esperar hasta completar el módulo anterior.

Cómo funciona el comando de espera

El comando de espera utilizado para monitorear el proceso anterior, depende del estado de retorno del proceso anterior, devolverá el estado de salida. Por ejemplo, si queremos esperar para completar un proceso particular 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.

- PID de espera (PID - ID de proceso de un comando, para el cual la utilidad espera la finalización).
- 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.

El comando de espera sale con el valor 0 cuando llama sin ningún proceso secundario y todos los ID de proceso conocidos por el shell actual han terminado. Si el comando de espera detecta algún error, devuelve cualquier valor del 1 al 126. Si se desconoce la última identificación del proceso, el comando de espera finaliza con el valor 127.

Ejemplos de comandos de espera

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

Ejemplo:1 – Script con comando de espera

Tenemos dos scripts llamados 'foo.sh' y 'bar.sh' script. 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, obtendrá el PID de foo.sh y esperará a que se complete, una vez que se complete inicie el ciclo 'bar.sh' y complete.

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' script. 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 complete y ejecute ambos scripts.

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á. Finalmente, 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 retenidos por el proceso y espera a que se ejecute algún otro proceso. Necesitamos usar notificar para que este proceso sea consciente de que comience la ejecución nuevamente al finalizar otro proceso.

Suspender:esta llamada al sistema se utiliza cuando el usuario desea detener el proceso actual durante algún tiempo. Mantiene los bloqueos en los recursos hasta que finaliza el tiempo de suspensión y nuevamente comienza la ejecución del proceso. Aquí el proceso tiene control a lo largo de la ejecución. por ejemplo, ejecuté algún comando en bash y quiero dormir por un tiempo ya que esperaba algún resultado del comando ejecutado que se utilizará en la ejecución posterior del proceso actual.


Linux
  1. Comando wc Linux con ejemplos

  2. Comando de clasificación de Linux con ejemplos

  3. Comando Linux Tee con ejemplos

  4. Comando de cabeza de Linux con ejemplos

  5. Comando JQ en Linux con ejemplos

Comando de CD de Linux con ejemplos

Comando de vigilancia de Linux con ejemplos

Comando de espera en Linux explicado con ejemplos

Comando de exportación de Linux con ejemplos

Comando IP de Linux con ejemplos

Comando de espera en Linux explicado con ejemplos prácticos