Linux

Comando di attesa di Bash

Comando di attesa di Bash

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

Dal momento che aspettare comando influenza l'ambiente di esecuzione della shell corrente, è implementato come comando integrato nella maggior parte delle shell.

In questo articolo, esploreremo il built-in Bash aspettare comando.

bash aspettare Comando #

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

aspetta [opzioni] ID 

ID è l'ID del processo o del lavoro. se no ID è specificato, il comando attende il completamento di tutti i processi in background figlio.

Il aspettare comando restituisce lo stato di uscita dell'ultimo comando atteso.

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

aspetta 7654

Quando vengono dati 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 processo shell (racchiuso tra parentesi) e l'ID del processo verranno visualizzati sul tuo terminale:

[2] 54377 

Per attendere il lavoro, eseguire il aspettare comando seguito dalla specifica del lavoro:

aspetta %2

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

aspetta -n 45432 54346 76573

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

wait -p job_id -n 45432 54346 76573

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

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

Esempi #

aspettare è tipicamente usato 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: $id_processo" wait $id_processo echo "Stato di uscita: $?" 

Spieghiamo il codice riga per riga:

  1. La prima riga si chiama shebang e dice al sistema operativo quale interprete usare per analizzare il resto del file.
  2. Stiamo usando il dormire 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 di dormire comando. Stiamo memorizzando il PID in una variabile (id_processo).
  4. Stampa il numero PID.
  5. Il PID viene passato al aspettare comando che attende il dormire comando completato.
  6. Stampa lo stato di uscita del aspettare comando. $? è una variabile Bash interna che contiene lo stato di uscita dell'ultimo comando eseguito.

Se esegui lo script, stamperà qualcosa del genere:

PID: 36353 Stato di uscita: 0 

Ecco un esempio usando il -n opzione:

#!/bin/bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Primo lavoro completato." wait echo "Tutti i lavori sono stati completati." 

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

primo lavoro completato tutti i lavori completati 

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

dormire 3600 e
[1] 46671 

Attendi il processo:

aspetta 46671

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

uccidere -STOP 46671

Una volta modificato lo stato del processo, il, aspettare il comando completerà e restituirà il codice di uscita del processo.

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

dormire 3600 easpetta -f 46671

Interrompi il processo dall'altro terminale:

uccidere -STOP 46671

Questa volta il aspettare il comando non verrà completato. Funzionerà fino al dormire il processo termina.

Conclusione #

Il aspettare il comando attende il completamento dei lavori specificati e restituisce il codice di uscita del lavoro.

Se hai domande o commenti, non esitare a lasciare un commento.

Le migliori distribuzioni Linux per il gioco nel 2021
Il sistema operativo Linux ha fatto molta strada dal suo aspetto originale, semplice e basato su server. Questo sistema operativo è notevolmente migli...
Come acquisire e riprodurre in streaming la tua sessione di gioco su Linux
In passato, giocare era considerato solo un hobby, ma con il tempo l'industria dei giochi ha visto una crescita enorme in termini di tecnologia e nume...
I migliori giochi da giocare con il tracciamento delle mani
Oculus Quest ha recentemente introdotto la grande idea del tracciamento manuale senza controller. Con un numero sempre crescente di giochi e attività ...