GNU/Linux >> Znalost Linux >  >> Linux

Bash čeká příkaz

wait je příkaz, který čeká na dokončení daných úloh a vrací stav ukončení příkazu čekalo na něj.

Protože wait příkaz ovlivňuje aktuální prostředí provádění shellu, je implementován jako vestavěný příkaz ve většině shellů.

V tomto článku prozkoumáme vestavěný wait v Bash příkaz.

Bash wait Příkaz #

Obecná syntaxe wait vestavěný má následující podobu:

wait [options] ID

ID je ID procesu nebo úlohy. Pokud žádné ID je zadáno, příkaz čeká, dokud nebudou dokončeny všechny podřízené úlohy na pozadí.

wait příkaz vrátí stav ukončení posledního čekajícího příkazu.

Chcete-li například čekat na proces na pozadí s PID 7654 , použili byste:

wait 7654

Když je zadáno více procesů, příkaz čeká na dokončení všech procesů.

Úlohy jsou specifikovány pomocí specifikace úlohy (“jobspec”), což je způsob, jak odkazovat na procesy, které tvoří úlohu. Specifikace úlohy začíná symbolem procenta následovaným číslem úlohy (%n ). Zde je příklad:

Spusťte příkaz na pozadí:

rsync -a /home /tmp/home &

ID úlohy shellu (v závorkách) a ID procesu se zobrazí na vašem terminálu:

[2] 54377

Chcete-li na úlohu počkat, spusťte příkaz wait příkaz následovaný specifikací úlohy:

wait %2

Při vyvolání pomocí -n příkaz čeká pouze na dokončení jedné úlohy z daných pid nebo specifikací úlohy a vrátí svůj výstupní stav. Pokud nejsou zadány žádné argumenty, wait -n čeká na dokončení jakékoli úlohy na pozadí a vrátí se do stavu ukončení úlohy.

wait -n 45432 54346 76573

Ve výše uvedeném příkladu wait -n vytiskne pouze návratový stav úlohy, která skončí jako první; neukazuje PID úlohy. Pokud chcete získat pid úlohy nebo specifikaci úlohy, pro kterou je vrácen stav ukončení, použijte -p možnost přiřadit jej k proměnné:

wait -p job_id -n 45432 54346 76573

-p možnost byla představena v Bash 5.1. Pokud používáte starší verzi Bash, zobrazí se chyba „neplatná možnost“.

-f volba říká wait počkat, až se každý pid nebo jobspec skutečně ukončí, než vrátí svůj výstupní kód, místo aby se vrátil při změně stavu úlohy. Tato možnost je platná pouze v případě, že je povoleno řízení úlohy. Ve výchozím nastavení je řízení úloh povoleno pouze pro interaktivní výzvy.

Příklady #

wait se obvykle používá ve skriptech shellu, které vytvářejí podřízené procesy, které se spouštějí paralelně.

Chcete-li ilustrovat, jak příkaz funguje, vytvořte následující skript:

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

Pojďme si vysvětlit kód řádek po řádku:

  1. První řádek se nazývá shebang a říká operačnímu systému, který interpret má použít k analýze zbytku souboru.
  2. Používáme sleep příkaz k emulaci časově náročného procesu na pozadí.
  3. $! je interní Bash proměnná, která ukládá PID poslední spuštěné úlohy na pozadí. V tomto příkladu je to PID sleep příkaz. PID ukládáme do proměnné (process_id ).
  4. Vytiskne číslo PID.
  5. PID je předán do wait příkaz, který čeká, dokud se sleep příkaz se dokončí.
  6. Vytiskne stav ukončení wait příkaz. $? je interní Bash proměnná, která uchovává stav ukončení posledního provedeného příkazu.

Pokud skript spustíte, vypíše něco takového:

PID: 36353
Exit status: 0

Zde je příklad pomocí -n možnost:

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

Když je skript spuštěn, spustí 3 procesy na pozadí. wait -n čeká na dokončení první úlohy a vytištění příkazu echo. wait čeká na dokončení všech podřízených úloh na pozadí.

first job completed
all jobs completed

Poslední příklad vysvětluje -f volba. Otevřete terminál a spusťte:

sleep 3600 &
[1] 46671

Počkejte na proces:

wait 46671

Otevřete další terminál a zastavte proces pomocí kill příkaz:

kill -STOP 46671

Jakmile se stav procesu změní, wait příkaz dokončí a vrátí kód ukončení procesu.

Nyní opakujte stejné kroky, ale tentokrát použijte wait -f $pid :

sleep 3600 &wait -f 46671

Zastavte proces z druhého terminálu:

kill -STOP 46671

Tentokrát wait příkaz nebude dokončen. Poběží, dokud sleep proces skončí.

Závěr č.

wait příkaz čeká na dokončení zadaných úloh a vrátí kód ukončení úlohy.


Linux
  1. spouštění apachectl z bash

  2. Bash:počkejte s časovým limitem

  3. příkaz pro export bash

  1. Příkaz „eval“ v Bash?

  2. bash sh - příkaz nenalezen

  3. Bash - příkaz Datum a mezera

  1. Bash wait Příkaz s příklady

  2. Spusťte příkaz bash na jenkins pipeline

  3. Bash, pokud na jednom řádku