GNU/Linux >> Tutoriales Linux >  >> Linux

Comando de espera bash

wait es un comando que espera a que se completen los trabajos dados y devuelve el estado de salida del comando esperado.

Desde el wait El comando afecta el entorno de ejecución de shell actual, se implementa como un comando integrado en la mayoría de los shells.

En este artículo, exploraremos el wait incorporado de Bash comando.

Bash wait Comando #

La sintaxis general de wait incorporado toma la siguiente forma:

wait [options] ID

ID es el ID del proceso o trabajo. Si no hay ID se especifica, el comando espera hasta que se completen todos los trabajos secundarios en segundo plano.

La wait comando devuelve el estado de salida del último comando esperado.

Por ejemplo, para esperar un proceso en segundo plano con PID 7654 , usarías:

wait 7654

Cuando se dan varios procesos, el comando espera a que se completen todos los procesos.

Los trabajos se especifican utilizando la especificación de trabajo ("jobspec"), que es una forma de referirse a los procesos que componen el trabajo. Una especificación de trabajo comienza con un símbolo de porcentaje seguido del número de trabajo (%n ). Aquí hay un ejemplo:

Ejecute un comando en segundo plano:

rsync -a /home /tmp/home &

El ID del trabajo de shell (entre corchetes) y el ID del proceso se mostrarán en su terminal:

[2] 54377

Para esperar el trabajo, ejecute wait comando seguido de la especificación del trabajo:

wait %2

Cuando se invoca con -n opción, el comando espera solo a que se complete un solo trabajo de los pid o especificaciones de trabajo dados y devuelve su estado de salida. Si no se proporcionan argumentos, wait -n espera a que se complete cualquier trabajo en segundo plano y devuelva el estado de salida del trabajo.

wait -n 45432 54346 76573

En el ejemplo anterior, wait -n solo imprime el estado de retorno del trabajo que sale primero; no muestra el PID del trabajo. Si desea obtener el pid del trabajo o la especificación del trabajo para el que se devuelve el estado de salida, use -p opción para asignarlo a una variable:

wait -p job_id -n 45432 54346 76573

-p La opción se introdujo en Bash 5.1. Si usa una versión anterior de Bash, obtendrá un error de "opción no válida".

El -f opción le dice a wait esperar a que cada pid o especificación de trabajo finalice realmente antes de devolver su código de salida, en lugar de regresar cuando se cambia el estado del trabajo. Esta opción solo es válida cuando el control de trabajos está habilitado. De forma predeterminada, el control de trabajos está habilitado solo para indicaciones interactivas.

Ejemplos #

wait se usa típicamente en scripts de shell que generan procesos secundarios que se ejecutan en paralelo.

Para ilustrar cómo funciona el comando, cree el siguiente script:

#!/bin/bash
sleep 30 &
process_id=$!
echo "PID: $process_id"
wait $process_id
echo "Exit status: $?"

Expliquemos el código línea por línea:

  1. La primera línea se llama shebang y le dice al sistema operativo qué intérprete usar para analizar el resto del archivo.
  2. Estamos usando el sleep Comando para emular un proceso en segundo plano que requiere mucho tiempo.
  3. $! es una variable interna de Bash que almacena el PID del último trabajo ejecutado en segundo plano. En este ejemplo, ese es el PID del sleep dominio. Estamos almacenando el PID en una variable (process_id ).
  4. Imprime el número PID.
  5. El PID se pasa al wait comando que espera hasta que sleep el comando se completa.
  6. Imprime el estado de salida de wait dominio. $? es una variable interna de Bash que contiene el estado de salida del último comando ejecutado.

Si ejecuta el script, imprimirá algo como esto:

PID: 36353
Exit status: 0

Aquí un ejemplo usando el -n opción:

#!/bin/bash
sleep 3 &
sleep 30 &
sleep 5 &
wait -n
echo "First job completed."
wait
echo "All jobs completed."

Cuando se ejecuta el script, genera 3 procesos en segundo plano. wait -n espera hasta que se complete el primer trabajo y se imprima la declaración de eco. wait espera a que se completen todos los trabajos secundarios en segundo plano.

first job completed
all jobs completed

El último ejemplo explica el -f opción. Abre la terminal y ejecuta:

sleep 3600 &
[1] 46671

Espere el proceso:

wait 46671

Abra otra terminal y detenga el proceso con kill comando:

kill -STOP 46671

Una vez que se cambia el estado del proceso, wait el comando se completará y devolverá el código de salida del proceso.

Ahora, repite los mismos pasos, pero esta vez usa wait -f $pid :

sleep 3600 &wait -f 46671

Detener el proceso desde la otra terminal:

kill -STOP 46671

Esta vez el wait el comando no se completará. Se ejecutará hasta que sleep el proceso termina.

Conclusión #

La wait El comando espera a que se completen los trabajos especificados y devuelve el código de salida del trabajo.


Linux
  1. ¿El comando "eval" en Bash?

  2. iniciando apachectl desde bash

  3. Bash:esperar con tiempo de espera

  4. comando de exportación bash

  5. Ejecute el comando bash en la canalización de jenkins

Comando de historial en Linux (Bash History)

Comando de salida de Bash y códigos de salida

Comando Bash printf

Comando de espera en Linux con ejemplos

Script Bash (II)

Script Bash (III)