oota
on käsk, mis ootab antud tööde lõpetamist ja tagastab oodatud käsu väljumise oleku.
Kuna oota
käsk mõjutab praegust kestade käivitamise keskkonda, seda rakendatakse enamikus shellides sisseehitatud käsuna.
Selles artiklis uurime sisseehitatud Bashi oota
käsk.
Bash oota
Käsk nr
Üldine süntaks oota
sisseehitatud kujul on järgmine:
oota [valikud] ID
ID
on protsess või töö ID. Kui ei ID
on määratud, ootab käsk, kuni kõik lapse tausttööd on lõpetatud.
The oota
käsk tagastab viimati oodatud käsu väljumise oleku.
Näiteks oodata PID-ga taustaprotsessi 7654
, sa kasutaksid:
oota 7654
Kui antakse mitu protsessi, ootab käsk kõigi protsesside lõpuleviimist.
Töökohad määratakse töö spetsifikatsiooni („jobspec“) abil, mis on viis viidata töö moodustavatele protsessidele. Tööala algab protsendi sümboliga, millele järgneb töö number (% n
). Siin on näide:
Käivitage taustal käsk:
rsync -a / home / tmp / home &
Shell-töö ID (sulgudes ümbritsetud) ja protsessi ID kuvatakse teie terminalis:
[2] 54377
Töö ootamiseks käivitage oota
käsk, millele järgneb töö spetsifikatsioon:
oota% 2
Kui seda kutsutakse koos -n
suvand, ootab käsk antud pids-ist või jobspecamist ainult ühe töö lõpetamist ja tagastab selle väljumisoleku. Kui argumente ei esitata, oota-n
ootab, kuni mis tahes tausttöö on lõpetatud ja tagastatakse töölt lahkumise olek.
oota -n 45432 54346 76573
Ülaltoodud näites, oota-n
prindib ainult selle töö tagastamise oleku, mis väljub esimesena; see ei näita töö PID-d. Kui soovite hankida töö pid või töökoha, mille väljundolek tagastatakse, kasutage nuppu -lk
võimalus määrata see muutujale:
oota -p job_id -n 45432 54346 76573
-lk
võimalus võeti kasutusele Bash 5-s.1. Kui kasutate vanemat Bashi versiooni, kuvatakse tõrge „kehtetu valik”.
The -f
variant ütleb oota
enne väljumiskoodi tagastamist ootama, kuni iga pid või töökoht lõpeb, selle asemel, et naasta, kui töö olekut muudetakse. See valik kehtib ainult siis, kui töö juhtimine on lubatud. Vaikimisi on töö juhtimine lubatud ainult interaktiivsete viipade puhul.
Näited #
oota
kasutatakse tavaliselt shelliskriptides, mis sünnitavad paralleelselt toimuvaid lapseprotsesse.
Käsu toimimise illustreerimiseks looge järgmine skript:
#!/ bin / bash sleep 30 & process_id = $! echo "PID: $ process_id" oodake $ process_id echo "Väljumise olek: $?"
Selgitame koodi rea kaupa:
- Esimest rida nimetatakse shebangiks ja see ütleb operatsioonisüsteemile, millist tõlki kasutada ülejäänud faili sõelumiseks.
- Me kasutame
magama
käsk jäljendada aeganõudvat taustaprotsessi. $!
on sisemine muutuja Bash, mis salvestab taustal viimase käivitatud töö PID. Selles näites on seemagama
käsk. PID salvestatakse muutujasse (process_id
).- Prindib PID-numbri.
- PID edastatakse
oota
käsk, mis ootab kunimagama
käsk on lõpule viidud. - Prindib
oota
käsk.$?
on sisemine muutuja Bash, mis hoiab viimati täidetud käsu väljumisolekut.
Kui käivitate skripti, prindib see midagi sellist:
PID: 36353 Väljumise staatus: 0
Siin näide, kasutades -n
võimalus:
#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n kaja "Esimene töö on lõpetatud."oota kaja" Kõik tööd on lõpetatud."
Kui skript on täidetud, sünnitab see 3 taustaprotsessi. oota-n
ootab, kuni esimene töö on lõpule jõudnud ja kajaavaldus prinditakse. oota
ootab kõigi lapse tausttööde lõpetamist.
esimene töökoht lõpetatud kõik tööd lõpetatud
Viimane näide selgitab -f
valik. Avage terminal ja käivitage:
magada 3600 &
[1] 46671
Oodake protsessi:
oota 46671
Avage teine terminal ja peatage protsess nupuga tapma
käsk:
tappa -STOP 46671
Kui protsessi olek on muudetud, kuvatakse oota
käsk täidab ja tagastab protsessi väljumise koodi.
Korrake nüüd samu samme, kuid seekord kasutage oota -f $ pid
:
magada 3600 &
oota -f 46671
Peatage protsess teisest terminalist:
tappa -STOP 46671
Seekord oota
käsk ei lõpule. See kestab kuni magama
protsess lõpeb.
Järeldus #
The oota
command ootab määratud tööde lõpetamist ja tagastab töö väljumiskoodi.
Kui teil on küsimusi või tagasisidet, jätke julgelt kommentaar.