Uso del comando wait para sincronizar procesos
En este paso, aprenderá cómo utilizar el comando wait
para sincronizar procesos, lo que hace que el proceso padre espere a que se completen los procesos en segundo plano.
¿Qué es el comando wait?
El comando wait
se utiliza en scripts de shell para pausar la ejecución del script hasta que se hayan completado uno o más procesos en segundo plano. Esto es especialmente útil cuando es necesario asegurarse de que ciertas tareas finalicen antes de continuar con las operaciones posteriores.
Uso de wait sin argumentos
Cuando se utiliza sin argumentos, el comando wait
espera a que se completen todos los procesos en segundo plano.
Vamos a crear un script que demuestre esto:
-
Navegue hasta el directorio de su proyecto:
cd ~/project
-
Cree un nuevo script:
nano wait_demo.sh
-
Agregue el siguiente contenido al script:
#!/bin/bash
echo "Starting background tasks..."
## Start two background tasks
./long_task.sh &
./long_task.sh &
echo "Waiting for all background tasks to complete..."
wait
echo "All background tasks have completed!"
-
Guarde y salga del editor presionando Ctrl+O
, luego Enter
y, finalmente, Ctrl+X
.
-
Haga el script ejecutable:
chmod +x wait_demo.sh
-
Ejecute el script:
./wait_demo.sh
Verá una salida similar a la siguiente:
Starting background tasks...
Starting long task with PID 1236
Starting long task with PID 1237
Waiting for all background tasks to complete...
Long task completed
Long task completed
All background tasks have completed!
Note que el mensaje "All background tasks have completed!" solo aparece después de que ambas tareas largas hayan finalizado. Esto demuestra cómo el comando wait
pausa el script hasta que se completen todos los procesos en segundo plano.
Uso de wait con un PID específico
También puede utilizar wait
para esperar a un proceso específico proporcionando su PID:
-
Cree otro script:
nano wait_pid_demo.sh
-
Agregue el siguiente contenido:
#!/bin/bash
echo "Starting background tasks..."
## Start two background tasks and capture their PIDs
./long_task.sh &
pid1=$!
./long_task.sh &
pid2=$!
echo "First process PID: $pid1"
echo "Second process PID: $pid2"
echo "Waiting for the first task to complete..."
wait $pid1
echo "First task has completed!"
echo "Waiting for the second task to complete..."
wait $pid2
echo "Second task has completed!"
-
Guarde y salga del editor presionando Ctrl+O
, luego Enter
y, finalmente, Ctrl+X
.
-
Haga el script ejecutable:
chmod +x wait_pid_demo.sh
-
Ejecute el script:
./wait_pid_demo.sh
La salida mostrará que el script espera a cada proceso individualmente.
La variable $!
contiene el PID del proceso en segundo plano ejecutado más recientemente. Esto le permite capturar y utilizar posteriormente el PID con el comando wait
.