Linux

Naredba čekanja basha

Naredba čekanja basha

čekati je naredba koja čeka da se zadaci dovrše i vraća status izlaska čekane naredbe.

Budući da je čekati naredba utječe na trenutno okruženje izvršavanja ljuske, implementirana je kao ugrađena naredba u većini ljuski.

U ovom ćemo članku istražiti ugrađeni Bash čekati naredba.

Bash čekati Naredba #

Opća sintaksa čekati ugrađeni ima sljedeći oblik:

pričekajte [opcije] ID 

iskaznica je proces ili ID posla. Ako ne iskaznica je navedena, naredba čeka dok se ne dovrše svi podređeni zadaci.

The čekati naredba vraća status izlaza posljednje čekane naredbe.

Na primjer, pričekati pozadinski postupak s PID-om 7654, koristili biste:

čekaj 7654

Kada je zadano više procesa, naredba čeka da se svi procesi dovrše.

Poslovi se navode pomoću specifikacije posla (“jobspec”), što je način upućivanja na procese koji čine posao. Jobspec započinje simbolom postotka iza kojeg slijedi broj posla (% n). Evo primjera:

Pokrenite naredbu u pozadini:

rsync -a / home / tmp / home &

ID vašeg zadatka ljuske (okružen zagradama) i ID procesa prikazat će se na vašem terminalu:

[2] 54377 

Da biste pričekali posao, pokrenite čekati naredba nakon koje slijedi specifikacija posla:

pričekaj% 2

Kada se pozove s -n opcija, naredba čeka samo jedan posao iz zadanih pida ili radnih zadataka da se dovrši i vraća svoj izlazni status. Ako se ne daju argumenti, čekaj -n čeka da se bilo koji pozadinski posao dovrši i vrati status izlaska iz posla.

čekati -n 45432 54346 76573

U gornjem primjeru, čekaj -n ispisuje samo status povratka posla koji je prvi izašao; ne prikazuje PID posla. Ako želite dobiti pid posla ili Jobspec za koji se vraća status izlaza, upotrijebite -str mogućnost da ga dodijelite varijabli:

čekati -p job_id -n 45432 54346 76573

-str opcija je uvedena u Bashu 5.1. Ako upotrebljavate stariju inačicu Basha, dobit ćete pogrešku "nevaljana opcija".

The -f opcija govori čekati pričekati da se svaki pid ili Jobspec stvarno završi prije nego što vrati svoj izlazni kôd, umjesto da se vrati kada se status posla promijeni. Ova opcija vrijedi samo kad je omogućena kontrola posla. Prema zadanim postavkama kontrola posla omogućena je samo za interaktivne upite.

Primjeri #

čekati se obično koristi u skriptama ljuske koje stvaraju podređene procese koji se izvršavaju paralelno.

Da biste ilustrirali kako naredba radi, stvorite sljedeću skriptu:

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

Objasnimo kod po retke:

  1. Prvi redak naziva se shebang i govori operativnom sustavu kojeg tumača treba koristiti za raščlanjivanje ostatka datoteke.
  2. Koristimo spavati naredba za oponašanje dugotrajnog pozadinskog procesa.
  3. $! je interna Bash varijabla koja pohranjuje PID zadnjeg pokrenutog posla u pozadini. U ovom primjeru to je PID datoteke spavati naredba. Pohranjujemo PID u varijablu (proces_id).
  4. Ispisuje PID broj.
  5. PID se prosljeđuje čekati naredba koja čeka do spavati naredba dovršava.
  6. Ispisuje status izlaza iz čekati naredba. $? je interna Bash varijabla koja sadrži status izlaza posljednje izvršene naredbe.

Ako pokrenete skriptu, ispisat će otprilike ovako:

PID: 36353 Izlazni status: 0 

Evo primjera pomoću -n opcija:

#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Prvi posao završen."wait echo" Svi poslovi dovršeni." 

Kada se skripta izvrši, ona generira 3 pozadinska procesa. čekaj -n čeka dok se prvi posao ne dovrši i ispiše se odjek. čekati čeka da se završe svi pozadinski poslovi za djecu.

prvi završen posao svi završeni poslovi 

Posljednji primjer objašnjava -f opcija. Otvorite terminal i pokrenite:

spavanje 3600 &
[1] 46671 

Pričekajte postupak:

čekaj 46671

Otvorite drugi terminal i zaustavite postupak pomoću ubiti naredba:

ubiti -STOP 46671

Jednom kada se status procesa promijeni, čekati naredba će dovršiti i vratiti izlazni kod procesa.

Sada ponovite iste korake, ali ovaj put upotrijebite pričekaj -f $ pid:

spavanje 3600 &čekati -f 46671

Zaustavite postupak s drugog terminala:

ubiti -STOP 46671

Ovaj put čekati naredba se neće dovršiti. Trajat će do spavati proces se završava.

Zaključak #

The čekati naredba čeka da se navedeni poslovi dovrše i vraća izlazni kod posla.

Ako imate pitanja ili povratne informacije, slobodno ostavite komentar.

Kako instalirati i igrati Doom na Linuxu
Uvod u Doom Serija Doom nastala je 90-ih nakon izlaska originalnog Dooma. To je bio trenutni hit i od tog vremena nadalje igraća serija dobila je broj...
Vulkan za korisnike Linuxa
Sa svakom novom generacijom grafičkih kartica vidimo da programeri igara pomiču granice grafičke vjernosti i dolaze na korak od fotorealizma. No, bez ...
OpenTTD vs Simutrans
Stvaranje vlastite simulacije prijevoza može biti zabavno, opuštajuće i izuzetno primamljivo. Zbog toga morate isprobati što više igara kako biste pro...