Espere
es un comando que espera a que se completen los trabajos dados y devuelve el estado de salida del comando esperado.
Desde el Espere
El comando afecta el entorno de ejecución actual del shell, se implementa como un comando integrado en la mayoría de los shells.
En este artículo, exploraremos el Bash integrado Espere
mando.
Intento Espere
Comando #
La sintaxis general del Espere
incorporado toma la siguiente forma:
esperar ID de [opciones]
IDENTIFICACIÓN
es el proceso o la identificación del trabajo. Si no IDENTIFICACIÓN
se especifica, el comando espera hasta que se completen todos los trabajos secundarios en segundo plano.
La Espere
comando devuelve el estado de salida del último comando esperado.
Por ejemplo, para esperar un proceso en segundo plano con PID 7654
, usarías:
espera 7654
Cuando se dan varios procesos, el comando espera a que se completen todos los procesos.
Los trabajos se especifican utilizando la especificación del trabajo ("jobpec"), 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 (%norte
). Aquí hay un ejemplo:
Ejecute un comando en segundo plano:
rsync -a / home / tmp / home y
La identificación del trabajo de shell (entre corchetes) y la identificación del proceso se mostrarán en su terminal:
[2] 54377
Para esperar el trabajo, ejecute el Espere
comando seguido de la especificación del trabajo:
espera% 2
Cuando se invoca con el -norte
opción, el comando espera solo a que se complete un solo trabajo de los pids o especificaciones de trabajo dados y devuelve su estado de salida. Si no se proporcionan argumentos, espera -n
espera a que se complete cualquier trabajo en segundo plano y devuelva el estado de salida del trabajo.
esperar -n 45432 54346 76573
En el ejemplo anterior, espera -n
solo imprime el estado de devolución del trabajo que sale primero; no muestra el PID del trabajo. Si desea obtener el pid de trabajo o la especificación de trabajo para el que se devuelve el estado de salida, use el -pag
opción para asignarlo a una variable:
esperar -p job_id -n 45432 54346 76573
-pag
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".
La -F
la opción dice Espere
esperar a que cada pid o especificación de trabajo termine 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 avisos interactivos.
Ejemplos #
Espere
se utiliza normalmente 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 dormir 30 & process_id = $! echo "PID: $ process_id" espera $ process_id echo "Estado de salida: $?"
Expliquemos el código línea por línea:
- La primera línea se llama shebang y le dice al sistema operativo qué intérprete utilizar para analizar el resto del archivo.
- Estamos usando el
dormir
comando para emular un proceso en segundo plano que requiere mucho tiempo. PS!
es una variable interna de Bash que almacena el PID del último trabajo ejecutado en segundo plano. En este ejemplo, ese es el PID deldormir
mando. Estamos almacenando el PID en una variable (identificacion de proceso
).- Imprime el número PID.
- El PID se pasa al
Espere
comando que espera hasta que eldormir
el comando se completa. - Imprime el estado de salida del
Espere
mando.PS?
es una variable interna de Bash que mantiene el estado de salida del último comando ejecutado.
Si ejecuta el script, imprimirá algo como esto:
PID: 36353 Estado de salida: 0
Aquí un ejemplo usando el -norte
opción:
#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Primer trabajo completado."esperar eco" Todos los trabajos completados."
Cuando se ejecuta el script, genera 3 procesos en segundo plano. espera -n
espera hasta que se completa el primer trabajo y se imprime la declaración de eco. Espere
espera a que se completen todos los trabajos secundarios en segundo plano.
primer trabajo completado todos los trabajos completados
El último ejemplo explica el -F
opción. Abra la terminal y ejecute:
dormir 3600 y
[1] 46671
Espere el proceso:
espera 46671
Abra otra terminal y detenga el proceso con el matar
mando:
matar -STOP 46671
Una vez que se cambia el estado del proceso, Espere
El comando completará y devolverá el código de salida del proceso.
Ahora, repita los mismos pasos, pero esta vez use esperar -f $ pid
:
dormir 3600 y
espera -f 46671
Detenga el proceso desde la otra terminal:
matar -STOP 46671
Esta vez el Espere
el comando no se completará. Funcionará hasta que dormir
el proceso termina.
Conclusión #
La Espere
El comando espera a que se completen los trabajos especificados y devuelve el código de salida del trabajo.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario.