GNU/Linux >> Linux Esercitazione >  >> Linux

Bash wait Comando

wait è un comando che attende il completamento dei lavori indicati e restituisce lo stato di uscita del comando atteso.

Dal momento che wait comando influisce sull'ambiente di esecuzione della shell corrente, è implementato come comando integrato nella maggior parte delle shell.

In questo articolo, esploreremo il wait integrato in Bash comando.

Bash wait Comando #

La sintassi generale di wait built-in assume la forma seguente:

wait [options] ID

ID è l'ID processo o lavoro. Se nessun ID è specificato, il comando attende il completamento di tutti i processi secondari in background.

L'wait command restituisce lo stato di uscita dell'ultimo comando atteso.

Ad esempio, per attendere un processo in background con PID 7654 , useresti:

wait 7654

Quando vengono forniti più processi, il comando attende il completamento di tutti i processi.

I lavori vengono specificati utilizzando la specifica del lavoro ("jobspec"), che è un modo per fare riferimento ai processi che compongono il lavoro. Una specifica del lavoro inizia con un simbolo di percentuale seguito dal numero del lavoro (%n ). Ecco un esempio:

Esegui un comando in background:

rsync -a /home /tmp/home &

L'ID del lavoro shell (racchiuso tra parentesi) e l'ID del processo verranno visualizzati sul tuo terminale:

[2] 54377

Per attendere il lavoro, esegui wait comando seguito dalla specifica del lavoro:

wait %2

Quando viene invocato con -n opzione, il comando attende solo il completamento di un singolo lavoro dai pid o dalle specifiche del lavoro forniti e restituisce il suo stato di uscita. Se non vengono forniti argomenti, wait -n attende il completamento di qualsiasi processo in background e restituisce lo stato di uscita del processo.

wait -n 45432 54346 76573

Nell'esempio sopra, wait -n stampa solo lo stato di ritorno del lavoro che esce per primo; non mostra il PID del lavoro. Se vuoi ottenere il job pid o jobspec per il quale viene restituito lo stato di uscita, usa il -p opzione per assegnarlo a una variabile:

wait -p job_id -n 45432 54346 76573

-p opzione è stata introdotta in Bash 5.1. Se utilizzi una versione precedente di Bash, riceverai un errore di "opzione non valida".

Il -f l'opzione dice wait attendere che ogni pid o jobspec termini effettivamente prima di restituire il codice di uscita, anziché restituire quando lo stato del lavoro viene modificato. Questa opzione è valida solo quando il controllo del lavoro è abilitato. Per impostazione predefinita, il controllo dei lavori è abilitato solo per i prompt interattivi.

Esempi #

wait viene in genere utilizzato negli script di shell che generano processi figlio che vengono eseguiti in parallelo.

Per illustrare come funziona il comando, crea il seguente script:

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

Spieghiamo il codice riga per riga:

  1. La prima riga si chiama shebang e dice al sistema operativo quale interprete utilizzare per analizzare il resto del file.
  2. Stiamo usando il sleep comando per emulare un lungo processo in background.
  3. $! è una variabile Bash interna che memorizza il PID dell'ultimo lavoro eseguito in background. In questo esempio, questo è il PID del sleep comando. Stiamo archiviando il PID in una variabile (process_id ).
  4. Stampa il numero PID.
  5. Il PID viene passato a wait comando che attende fino al sleep comando completato.
  6. Stampa lo stato di uscita di wait comando. $? è una variabile Bash interna che mantiene lo stato di uscita dell'ultimo comando eseguito.

Se esegui lo script, verrà stampato qualcosa del genere:

PID: 36353
Exit status: 0

Ecco un esempio usando -n opzione:

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

Quando lo script viene eseguito, genera 3 processi in background. wait -n attende il completamento del primo lavoro e la stampa dell'istruzione echo. wait attende il completamento di tutti i lavori in background figlio.

first job completed
all jobs completed

L'ultimo esempio spiega il -f opzione. Apri il terminale ed esegui:

sleep 3600 &
[1] 46671

Attendi il processo:

wait 46671

Apri un altro terminale e interrompi il processo con kill comando:

kill -STOP 46671

Una volta modificato lo stato del processo, wait il comando verrà completato e restituirà il codice di uscita del processo.

Ora, ripeti gli stessi passaggi, ma questa volta usa wait -f $pid :

sleep 3600 &wait -f 46671

Interrompi il processo dall'altro terminale:

kill -STOP 46671

Questa volta il wait il comando non verrà completato. Funzionerà fino al sleep il processo termina.

Conclusione #

L'wait il comando attende il completamento dei lavori specificati e restituisce il codice di uscita del lavoro.


Linux
  1. a partire da apachectl bash

  2. Bash:aspetta con timeout

  3. comando di esportazione bash

  4. Bash - Comando data e spazio

  5. Esegui il comando bash sulla pipeline jenkins

Comando della cronologia in Linux (Cronologia di Bash)

Comando di uscita Bash e codici di uscita

Comando Bash printf

Attendi comando in Linux con esempi

Script Bash(II)

Scripting Bash(III)