Comando | Explicación |
wait | Sin ningún parámetro, wait El comando espera a que finalicen todos los procesos en segundo plano antes de continuar con el script. |
wait <process or job ID> | Un PID o ID de trabajo agregado espera a que finalice un proceso específico antes de continuar con el script. |
wait -n | Espera a que solo se complete el siguiente proceso en segundo plano y devuelve un estado de salida. |
wait -f | Terminar un programa primero espera a que finalice la tarea en segundo plano antes de salir. |
Ejemplos de comandos de espera
Hay tres parámetros adicionales para saber cuando se trabaja con esperar en guiones bash:
1. El signo de y comercial (&
) después de un comando indica un trabajo en segundo plano.
2. $!
obtiene el PID del último proceso en segundo plano. Almacene el PID anterior en una variable cuando trabaje con múltiples procesos en segundo plano.
3. $?
imprime el estado de salida del último proceso.
Para ver cómo estos tres parámetros funcionan juntos, abra una ventana de terminal y ejecute:
sleep 10 &
echo $!
echo $?
El $!
El parámetro almacena el PID del proceso en segundo plano, mientras que $?
almacena el estado de salida. El estado de salida 0
indica que el comando finalizó con éxito.
Ejemplo de espera de proceso único
1. Comience abriendo la terminal y cree un proceso simple en segundo plano:
sleep 10 &
2. Confirme que el trabajo se está ejecutando en segundo plano con:
jobs -l
3. Usa el wait
comando sin ningún parámetro para hacer una pausa hasta que se complete el proceso:
wait
El terminal espera a que finalice el proceso en segundo plano.
Después de 10 segundos (debido a sleep 10
), la consola imprime un Listo mensaje.
Ejemplo de espera bash de proceso único
Utilice el wait
comando para indicar en qué punto debe ejecutarse un proceso en segundo plano dentro de un script.
1. Por ejemplo, agregue el siguiente código en un editor de texto:
#!/bin/bash
echo Background process &
echo First message
echo Second message
wait
echo Third message
Si el proceso en segundo plano no finaliza el primer y el segundo proceso, wait
El comando invoca una pausa para esperar a que se complete el proceso en segundo plano después del segundo proceso antes de continuar con el tercer proceso.
2. Guarde el script como single_process.sh . En la terminal, cambie los permisos para que el script sea ejecutable:
sudo chmod +x single_process.sh
3. Ejecute el script con:
./single_process.sh
El proceso en segundo plano se completa en cualquier momento antes de la wait
comando, y la secuencia de comandos continúa.
Ejemplo de espera de procesos múltiples
1. Abra el editor de texto y agregue el siguiente script con múltiples procesos:
#!/bin/bash
sleep 10 &
sleep 15 &
sleep 5 &
echo $(date +%T)
wait
echo $(date +%T)
El script imprime la hora actual antes y después de wait
dominio. Sin ningún parámetro, el programa espera a que finalicen todos los procesos.
2. Guarde el script como test.sh y cerrar el archivo. A continuación, haga que el script sea ejecutable:
sudo chmod +x test.sh
3. Por último, ejecuta el programa con:
./test.sh
Dado que los procesos se ejecutan en segundo plano, los tres se completan en quince segundos.
4. Use el mismo script para probar los siguientes casos de uso:
- Agregue el
-n
parámetro para <strong>wait</strong>
. Solo se completa el proceso más rápido y el script finaliza en diez segundos.
- Agregue la identificación del trabajo para indicar qué trabajo debe esperar el script. Por ejemplo,
wait %1
pausas para el proceso 1 (sleep 10
) para completar.
Múltiples procesos bash wait con ejemplo de PID
1. Cuando trabaje con varios procesos, utilice el PID para identificar un proceso. El siguiente script de ejemplo muestra un caso de uso único:
#!/bin/bash
echo "Process 1 lasts for 2s" && sleep 2 &
PID=$!
echo "Process 2 lasts for 3s" && sleep 3 &
echo "Current time $(date +%T)"
wait $PID
echo "Process 1 ended at time $(date +%T) with exit status $?"
wait $!
echo "Process 2 ended at time $(date +%T) with exit status $?"
2. Guarde el script como multi_wait.sh . Haga que el script sea ejecutable con:
sudo chmod +x multi_wait.sh
3. Ejecute el script para ver el resultado:
./multi_wait.sh
El script tarda dos segundos en completar el primer proceso (debido a sleep
2 ) y tres segundos para completar el segundo proceso. Los dos procesos se ejecutan simultáneamente y ambos se completan en tres segundos.