laukti
yra komanda, kuri laukia, kol duoti darbai bus baigti, ir grąžins laukto komandos išėjimo būseną.
Kadangi laukti
komanda veikia dabartinę apvalkalo vykdymo aplinką, daugumoje apvalkalų ji įgyvendinama kaip integruota komanda.
Šiame straipsnyje mes ištirsime „Bash“ integruotą laukti
komandą.
Bashas laukti
Komanda Nr
Bendroji sintaksė laukti
įmontuotas yra tokia forma:
palauk [parinkčių] ID
ID
yra proceso arba darbo ID. Jei ne ID
yra nurodyta, komanda laukia, kol bus baigti visi vaiko foniniai darbai.
The laukti
komanda grąžina paskutinės lauktos komandos išėjimo būseną.
Pavyzdžiui, palaukti foninio proceso su PID 7654
, jūs naudotumėte:
palauk 7654
Kai pateikiami keli procesai, komanda laukia, kol visi procesai bus baigti.
Darbai nurodomi naudojant darbo specifikaciją („jobspec“), kuri yra būdas nurodyti procesus, kurie sudaro darbą. Darbo sritis prasideda procentiniu simboliu, po kurio nurodomas darbo numeris (% n
). Štai pavyzdys:
Vykdykite komandą fone:
rsync -a / home / tmp / home &
„Shell“ darbo ID (apkabintas skliaustais) ir proceso ID bus rodomi jūsų terminale:
[2] 54377
Norėdami palaukti darbo, paleiskite laukti
komanda, po kurios pateikiama darbo specifikacija:
palauk% 2
Kai iškviečiamas su -n
parinktį, komanda laukia tik vienos užduoties iš nurodytų PID arba Jobspecs pabaigos ir grąžina jos išėjimo būseną. Jei nepateikiama jokių argumentų, palauk -n
laukia, kol bet kuri foninė užduotis bus baigta ir grąžins išėjimo iš darbo būseną.
palauk -n 45432 54346 76573
Aukščiau pateiktame pavyzdyje, palauk -n
atspausdina tik pirmojo darbo grįžimo būseną; tai nerodo darbo PID. Jei norite gauti darbo pid arba jobspec, kuriam grąžinama išėjimo būsena, naudokite -p
galimybė priskirti jį kintamajam:
palauk -p job_id -n 45432 54346 76573
-p
galimybė buvo įvesta „Bash 5“.1. Jei naudojate senesnę „Bash“ versiją, gausite klaidos klaidą „netinkama parinktis“.
The -f
variantas pasako laukti
palaukti, kol kiekvienas „pid“ arba „jobspec“ iš tikrųjų bus nutrauktas, prieš grąžinant išėjimo kodą, o ne grįžti pakeitus darbo būseną. Ši parinktis galioja tik tada, kai įjungtas darbo valdymas. Pagal numatytuosius nustatymus darbo valdymas įgalinamas tik interaktyviems raginimams.
# Pavyzdžiai
laukti
paprastai naudojamas apvalkalo scenarijuose, kurie pagimdo vaiko procesus, kurie vykdomi lygiagrečiai.
Norėdami iliustruoti komandos veikimą, sukurkite šį scenarijų:
#!/ bin / bash sleep 30 & process_id = $! echo "PID: $ process_id" palaukite $ process_id echo "Išėjimo būsena: $?"
Paaiškinkime kodą eilutėmis:
- Pirmoji eilutė vadinama „shebang“ ir operacinei sistemai nurodo, kurį vertėją naudoti likusiai rinkmenai išanalizuoti.
- Mes naudojame
miegoti
komanda imituoti daug laiko reikalaujantį foninį procesą. $!
yra vidinis „Bash“ kintamasis, kuris fone saugo paskutinio paleisto darbo PID. Šiame pavyzdyje tai yramiegoti
komandą. PID saugome kintamajame (proceso_id
).- Spausdina PID numerį.
- PID perduodamas
laukti
komanda, kuri laukia, kolmiegoti
komanda baigiama. - Spausdina išėjimo būseną
laukti
komandą.$?
yra vidinis „Bash“ kintamasis, turintis paskutinės įvykdytos komandos išėjimo būseną.
Jei paleisite scenarijų, jis atspausdins maždaug taip:
PID: 36353 Išėjimo būsena: 0
Čia pavyzdys naudojant -n
variantas:
#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Pirmas darbas baigtas.„palaukite aido“ Visi darbai baigti."
Vykdant scenarijų, jis pagimdo 3 foninius procesus. palauk -n
laukia, kol bus baigtas pirmasis darbas ir atspausdintas aido pareiškimas. laukti
laukia, kol bus baigti visi vaiko foniniai darbai.
pirmasis darbas baigtas visos baigtos darbo vietos
Paskutinis pavyzdys paaiškina -f
variantą. Atidarykite terminalą ir paleiskite:
miegoti 3600 ir
[1] 46671
Palaukite proceso:
palaukite 46671
Atidarykite kitą terminalą ir sustabdykite procesą naudodami nužudyti
komanda:
nužudyti -STOP 46671
Pakeitus proceso būseną, laukti
komanda užbaigs ir grąžins proceso išėjimo kodą.
Dabar pakartokite tuos pačius veiksmus, bet šį kartą naudokite palauk -f $ pid
:
miegoti 3600 ir
palauk -f 46671
Sustabdykite procesą iš kito terminalo:
nužudyti -STOP 46671
Šį kartą laukti
komanda nebus baigta. Jis veiks iki miegoti
procesas baigiasi.
Išvada Nr
The laukti
komanda laukia, kol bus baigtos nurodytos užduotys, ir grąžins darbo išėjimo kodą.
Jei turite klausimų ar atsiliepimų, palikite komentarą.