GNU/Linux >> Linux Esercitazione >  >> Linux

Attendi comando in Linux con esempi

Wait è un comando della shell che attende il completamento di un determinato processo, quindi restituisce il suo stato di uscita. Il comando Attendi viene utilizzato per attendere un particolare ID processo e ID processo e restituire il loro stato di terminazione.

Quando eseguiamo il grande flusso di automazione, dobbiamo fare in modo che alcuni moduli attendano fino al completamento del set precedente di moduli e restituiscono i dati forniti in pipeline nei moduli successivi, in questo caso possiamo usare il comando Attendi fino al completamento del modulo precedente.

Come funziona il comando wait

Comando di attesa utilizzato per monitorare il processo precedente, dipende dallo stato di ritorno del processo precedente restituirà lo stato di uscita. Ad esempio, se vogliamo attendere il completamento di un particolare ID processo 13245, dobbiamo utilizzare "wait 13245" quando il comando di attesa completo del processo 13245 restituisce i valori di ritorno dello stato di uscita 13245.

- wait PID (PID - Process ID di un comando, per il quale l'utility deve attendere la terminazione).
- wait JID (JID - Job ID che identifica un processo in background da attendere, applicabile solo per invocazioni di wait nell'ambiente di esecuzione della shell corrente).

Il valore dello stato di uscita del comando wait dipende dall'ultimo PID/JID specificato. Quando un processo termina in modo anomalo, lo stato di uscita sarà maggiore di 128.

Il comando Attendi esce con il valore 0 quando chiama senza processo figlio e tutti gli ID di processo sono noti alla shell corrente sono terminati. Se il comando wait rileva un errore, restituisce qualsiasi valore compreso tra 1 e 126. Se l'ultimo ID processo è sconosciuto, il comando wait esce con il valore 127.

Esempi di comando di attesa

Controlliamo alcuni script per capire come funziona il comando wait.

Esempio:1 – Script con comando Attendi

Abbiamo due script chiamati 'foo.sh' e 'bar.sh'. Lo script "Foo.sh" stampa i numeri compresi tra 1 e 5 e lo script "bar.sh" chiamerà foo.sh e lo eseguirà in background, otterrà il PID di foo.sh e attenderà il completamento, una volta completato lo farà avvia il ciclo 'bar.sh' e completa.

Script – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Script – bar.sh

#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
pid=$!
wait $pid
echo “Completed foo.sh”

for I in 1 2 3 4 5
do
        echo “bar.sh – Looping … number $i”
done

Risultato

Started bar.sh
Started foo.sh
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$

Esempio 2 – Script senza comando di attesa

Abbiamo due script chiamati 'foo.sh' e 'bar.sh'. Lo script 'foo.sh' stampa numeri da 1 a 5 e lo script bar.sh chiamerà foo.sh e lo eseguirà in background, ma non attenderà che foo.sh completi ed esegua entrambi gli script.

Script – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Script – bar.sh

#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
echo “Completed foo.sh”

for I in 1 2 3 4 5
do
        echo “bar.sh – Looping … number $i”
done

Risultato

Started bar.sh
Started foo.sh
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
$

Esempio:3 – Script con comando di attesa e stato di ritorno

Lo script 'bar.sh' chiamerà foo.sh e lo eseguirà in background, otterrà il PID di foo.sh e attenderà il completamento, una volta completato avvierà il ciclo bar.sh e verrà completato, infine, restituirà il codice di uscita dello script foo.sh.

Script – foo.sh (stato di uscita =0)

Script - foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Script – bar.sh

#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?

if [ $stat –eq 0 ]
then
       echo “Exit status - $stat”
else
        echo “Exit status - $stat”
fi

Risultato

foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Exit status - 0
$

Script – foo.sh (stato di uscita =NON Zero)

Script - foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      iiecho “foo.sh – Looping … number $i”
done

Script – bar.sh

#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?

if [ $stat –eq 0 ]
then
       echo “Exit status - $stat”
else
        echo “Exit status - $stat”
fi

Risultato

./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
Exit status – 127
$

Conclusione

Wait e Sleep sono entrambi chiamate di sistema basate sul tempo nel sistema operativo. Controlliamo la differenza tra il comando wait e sleep.

Attendi:quando l'utente desidera interrompere il processo corrente e rilascia tutte le risorse trattenute dal processo e attende l'esecuzione di un altro processo. È necessario utilizzare la notifica per rendere noto questo processo che ricomincia l'esecuzione al completamento dell'altro processo.

Sospensione:questa chiamata di sistema viene utilizzata quando l'utente desidera interrompere il processo corrente per un po' di tempo. Mantiene i blocchi sulle risorse fino a quando il tempo di sospensione non è terminato e ricomincia l'esecuzione del processo. Qui il processo ha il controllo durante l'esecuzione. ad esempio, ho eseguito un comando su bash e voglio dormire per un po' di tempo poiché mi aspetto dell'output dal comando eseguito che verrà utilizzato nell'ulteriore esecuzione del processo corrente.


Linux
  1. Comando wc Linux con esempi

  2. Comando di ordinamento Linux con esempi

  3. Comando Tee Linux con esempi

  4. Comando testa di Linux con esempi

  5. Comando JQ in Linux con esempi

Comando CD Linux con esempi

Comando Linux watch con esempi

Comando Wait in Linux spiegato con esempi

Comando di esportazione Linux con esempi

Comando IP Linux con esempi

Wait Command in Linux spiegato con esempi pratici