Come aspettare un processo specifico per completare in Linux?

Come aspettare un processo specifico per completare in Linux?

Abbiamo un comando di attesa di Linux per aspettare che uno o più di uno dei processi si completino nel sistema. Il comando versatile di attesa di Linux ci consente di scoprire quando viene completato un processo specifico. Lo stato di terminazione verrà restituito di conseguenza, permettendoci di identificare se il processo ha esito positivo a terminare o non riuscita per qualche altro motivo. Il comando di attesa continua a funzionare mentre attende il completamento di attività di sfondo specifiche. Il comando Linux Wait viene utilizzato nei casi d'uso seguenti per mostrare come funziona.

Esempio n. 1: usando un comando di attesa per il singolo processo bash.

Usiamo il comando di attesa per specificare quando il processo di sfondo di uno script deve iniziare l'elaborazione. Nel seguente script bash, abbiamo utilizzato il comando Echo che stampa l'istruzione "Processo di fondo", il che significa che il processo di fondo sta elaborando. Con questo comando Echo, abbiamo usato il simbolo "&" che viene utilizzato per eseguire un comando sullo sfondo. Quindi, abbiamo nuovamente impiegato i due comandi Echo che stampano l'affermazione "Prima attività" e "Seconda attività".

Successivamente, abbiamo invocato l'attesa che si fermerà per attendere che il processo di fondo finisca dopo il secondo processo prima di passare al terzo processo. La terza attività verrà elaborata alla terminazione del processo di fondo che verrà terminato in qualsiasi momento.

#!/Bin/Bash
Eco Processo di background e
Echo Primo compito
Echo Second Task
Aspettare
Eche Terza attività

L'output del comando di attesa ha visualizzato che dopo il completamento della prima attività e della seconda attività, la terza attività viene elaborata. Il comando Wait genera il "processo di fondo" dell'istruzione quando la prima e la seconda attività richiedono tempo per completare.

Linux@VirtualBox: ~ Bash ./Bash.sh
Prima attività
Secondo attività
Processo di base
Terza attività

Esempio n. 2: usando un comando di attesa per bash più processi.

Poiché il precedente script bash utilizza il comando di attesa per il singolo processo, stiamo usando il comando di attesa nello script bash per più processi da eseguire. Quando il comando di attesa viene utilizzato con il flag -n, attende solo il processo iniziale tra i processi di fondo. Lo script bash è fornito di seguito dove abbiamo distribuito per la prima volta i tre comandi di sonno impostati con valori specifici. Il comando del sonno è definito con il segno "&" di cui abbiamo già discusso in precedenza, il che indica che i processi di fondo sono in esecuzione.

Il primo comando di sonno indica che il processo di fondo necessita di "10" secondi per essere completato. Il processo di fondo richiede un completamento di "5" per il completamento e il terzo comando di sonno richiede "3" secondi per l'esecuzione del processo di fondo. Successivamente, il comando wait -n si chiama che aspetta solo il processo più breve. Qui, il processo più breve richiede tre secondi per completare tra gli altri processi. Quando viene completato il processo più breve, verrà stampata la dichiarazione di eco "completato il primo lavoro".

Dopodiché, abbiamo nuovamente distribuito il comando di attesa. Questo aspetterà di nuovo il processo di richiedere meno tempo. Ora, il processo meno dispendioso in termini di tempo richiede cinque secondi man mano che viene eseguito il processo di tre secondi. Dopo aver atteso cinque secondi del processo, verrà visualizzata la prossima dichiarazione di eco "completato il prossimo lavoro". Il comando successivo di attesa non utilizza alcun flag, il che significa che questo comando di attesa attenderà prima che tutti i processi vengano completati e quindi visualizza l'istruzione Echo "completato tutto il lavoro".

#!/Bin/Bash
Dormi 10 &
Dormi 5 &
Dormi 3 &
Aspetta -N
Echo “ha completato il primo lavoro."
Aspetta -N
Echo “ha completato il prossimo lavoro."
Aspettare
Echo “ha completato tutto il lavoro."

I risultati dello script bash di più processi con il comando di attesa sopra sono visualizzati nella seguente schermata di bash. L'attesa con l'opzione -n ​​comandi in pausa per 3 e 5 secondi, che è il tempo impiegato per il primo e successivo lavoro per finire i comandi di attesa, quindi mettere in pausa per dieci secondi, che è il tempo impiegato per lo sfondo rimanente processi da finire.

Linux@VirtualBox: ~ Bash ./Bash.sh
“Primo lavoro completato."
“Completato il prossimo lavoro."
“Completato tutto il lavoro."

Esempio n. 3: utilizzando un comando di attesa per bash più processi con ID processo.

Quando abbiamo a che fare con più processi nello script bash con il comando di attesa, l'ID processo è utile per identificare il processo. Qui nello script bash, abbiamo usato il comando Echo per stampare l'istruzione "Process1 per 3 secondi". Quindi, abbiamo usato l'operatore e l'operatore "&&" per impostare un altro comando che è il comando di sonno. Il comando sleep prende un valore di "3" che è il tempo per il completamento del processo di fondo. Quindi, abbiamo dichiarato la variabile "processid" che ha fornito un "$!" valore. Il simbolo “$!"Ottiene l'ID processo dell'ultimo comando eseguito. L'ultimo comando eseguito che richiede "3" secondi è archiviato nella variabile "ProcessID".

Ora, abbiamo specificato un altro comando di eco che stampa il "processo1 per 5 secondi" insieme al comando del sonno. Il comando sleep richiede cinque secondi per il completamento del secondo processo di sfondo. Successivamente, abbiamo stampato l'ora corrente utilizzando la struttura DateTime di Bash. Quindi, il comando di attesa viene utilizzato in cui la variabile "processid" è impostata come argomento. Il comando di attesa ora contiene il tempo di attesa della variabile ProcessID che è di tre secondi.

Dopo tre secondi, il processo rimanente dello script bash sarà completato. Nota che abbiamo un altro comando di attesa che viene superato con il segno "$!"Come argomento quindi, l'ultima dichiarazione di eco verrà eseguita. Per recuperare l'ID processo di comando dell'ultimo esecuzione.

#!/Bin/Bash
Echo "Process1 per 3 secondi" && Sleep 3 &
ProcessID = $!
Echo "Process1 per 5 secondi" && Sleep 5 &
echo "ora attuale $ (data +%t)"
Aspetta $ ProcessID
ECHO "Process1 Termination Time $ (Data +%T) con stato di uscita $?"
Aspetta $!
Echo "Process2 Tercaling Time $ (Data +%T) con stato di uscita $?"

L'output ha prima visualizzato il completamento del processo insieme al tempo per il completamento. Quindi, il processo di tempo corrente è completato. Successivamente, si è verificata l'attesa e quindi è stata eseguita il comando Echo successivo che ha visualizzato il valore di stato di uscita zero insieme al tempo di terminazione. Lo stato di uscita del valore zero rappresenta che il processo viene terminato correttamente. Ancora una volta, la pausa si verifica per il tempo che l'ultimo processo impiega per il completamento e l'ultima istruzione verrà visualizzata.

Linux@VirtualBox: ~ Bash ./Bash.sh
Process1 per 5 secondi
Process1 per 3 secondi
Ora attuale 00:31:20
Process1 Tempo di terminazione 00:31:23 con stato di uscita 0
Process2 Tempo di terminazione 00:31:25 con stato di uscita 0

Conclusione

L'articolo fornisce un modo per attendere un processo specifico per completare in Linux. Abbiamo usato il comando di attesa per aspettare il processo in esecuzione. Per prima cosa usiamo il comando di attesa per aspettare il singolo processo e poi abbiamo chiamato il comando di attesa per i più processi. Quindi, il comando di attesa viene chiamato sull'ID processo per ottenere l'ID processo di più processi.