č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:
- Prvi redak naziva se shebang i govori operativnom sustavu kojeg tumača treba koristiti za raščlanjivanje ostatka datoteke.
- Koristimo
spavati
naredba za oponašanje dugotrajnog pozadinskog procesa. $!
je interna Bash varijabla koja pohranjuje PID zadnjeg pokrenutog posla u pozadini. U ovom primjeru to je PID datotekespavati
naredba. Pohranjujemo PID u varijablu (proces_id
).- Ispisuje PID broj.
- PID se prosljeđuje
čekati
naredba koja čeka dospavati
naredba dovršava. - 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.