pagaidi
ir komanda, kas gaida, kamēr norādītie darbi ir pabeigti, un atgriež gaidītās komandas izejas statusu.
Kopš pagaidi
komanda ietekmē pašreizējo čaulas izpildes vidi, lielākajā daļā čaulu tā tiek ieviesta kā iebūvēta komanda.
Šajā rakstā mēs izpētīsim iebūvēto Bash pagaidi
komandu.
Bash pagaidi
Komanda #
Vispārējā sintakse pagaidi
iebūvētajam ir šāda forma:
pagaidiet [opcijas] ID
ID
ir procesa vai darba ID. Ja nē ID
ir norādīta, komanda gaida, līdz tiek pabeigti visi bērna fona darbi.
The pagaidi
komanda atgriež pēdējās gaidītās komandas izejas statusu.
Piemēram, lai gaidītu fona procesu ar PID 7654
, jūs izmantotu:
pagaidiet 7654
Kad tiek doti vairāki procesi, komanda gaida visu procesu pabeigšanu.
Darbi tiek norādīti, izmantojot darba specifikāciju (“jobspec”), kas ir veids, kā atsaukties uz procesiem, kas veido darbu. Darba sektors sākas ar procentuālo simbolu, kam seko darba numurs (% n
). Šeit ir piemērs:
Palaidiet komandu fonā:
rsync -a / home / tmp / home &
Korpusa darba ID (iespiests iekavās) un procesa ID tiks parādīts jūsu terminālā:
[2] 54377
Lai gaidītu darbu, palaidiet pagaidi
komandu, kam seko darba specifikācija:
pagaidiet% 2
Kad tiek izsaukts ar -n
opciju, komanda gaida tikai vienu darbu no dotajiem pids vai jobspecs pabeigšanas un atgriež tā izejas statusu. Ja argumenti nav sniegti, pagaidi -n
gaida, kamēr jebkurš fona darbs būs pabeigts un atgriezīs izejas statusu.
pagaidiet -n 45432 54346 76573
Iepriekš minētajā piemērā, pagaidi -n
izdrukā tikai tā darba atgriešanās statusu, kurš iziet pirmais; tas neparāda darba PID. Ja vēlaties iegūt darba pid vai jobspec, kuram tiek atgriezts izejas statuss, izmantojiet -lpp
iespēja to piešķirt mainīgajam:
pagaidiet -p job_id -n 45432 54346 76573
-lpp
opcija tika ieviesta Bash 5.1. Ja izmantojat vecāku Bash versiju, tiks parādīta kļūda “nederīga opcija”.
The -f
opcija stāsta pagaidi
gaidīt, kamēr katrs pids vai jobspec faktiski beigsies, pirms atgriezt izejas kodu, nevis atgriezties, kad tiek mainīts darba statuss. Šī opcija ir derīga tikai tad, ja ir iespējota darba kontrole. Pēc noklusējuma darba kontrole ir iespējota tikai interaktīvām uzvednēm.
Piemēri #
pagaidi
parasti tiek izmantots čaulas skriptos, kas rada bērnu procesus, kas tiek izpildīti paralēli.
Lai ilustrētu komandas darbību, izveidojiet šādu skriptu:
#!/ bin / bash sleep 30 & process_id = $! echo "PID: $ process_id" pagaidiet $ process_id echo "Izejas statuss: $?"
Paskaidrosim kodu pa rindām:
- Pirmo rindu sauc par shebang un operētājsistēmai tiek norādīts, kurš tulks jāizmanto, lai parsētu atlikušo failu.
- Mēs izmantojam
Gulēt
komanda atdarināt laikietilpīgu fona procesu. $!
ir iekšējs Bash mainīgais, kas fonā saglabā pēdējās palaistās darba PID. Šajā piemērā tas irGulēt
komandu. Mēs glabājam PID mainīgajā (process_id
).- Izdrukā PID numuru.
- PID tiek nodots
pagaidi
komanda, kas gaida līdzGulēt
komanda tiek pabeigta. - Izdrukā izejas statusu
pagaidi
komandu.$?
ir iekšējs Bash mainīgais, kuram ir pēdējās izpildītās komandas izejas statuss.
Ja palaidīsit skriptu, tas izdrukās apmēram šādi:
PID: 36353 Izejas statuss: 0
Šeit piemērs, izmantojot -n
iespēja:
#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Pirmais darbs pabeigts."pagaidiet atbalss" Visi darbi ir pabeigti."
Kad skripts tiek izpildīts, tas rada 3 fona procesus. pagaidi -n
gaida, kamēr pirmais darbs ir pabeigts, un atbalss paziņojums tiek izdrukāts. pagaidi
gaida, kad visi bērna fona darbi būs pabeigti.
pirmais darbs pabeigts, visi pabeigtie darbi
Pēdējais piemērs izskaidro -f
opcija. Atveriet termināli un palaidiet:
gulēt 3600 un
[1] 46671
Gaidiet procesu:
pagaidiet 46671
Atveriet citu termināli un pārtrauciet procesu ar nogalināt
komanda:
nogalināt-STOP 46671
Kad procesa statuss ir mainīts, pagaidi
komanda aizpildīs un atgriezīs procesa izejas kodu.
Tagad atkārtojiet tās pašas darbības, bet šoreiz izmantojiet pagaidiet -f $ pid
:
gulēt 3600 un
pagaidiet -f 46671
Pārtrauciet procesu no otra termināļa:
nogalināt-STOP 46671
Šoreiz pagaidi
komanda netiks pabeigta. Tas darbosies līdz plkst Gulēt
process tiek pārtraukts.
Secinājums Nr
The pagaidi
komanda gaida norādīto darbu pabeigšanu un atgriež darba izejas kodu.
Ja jums ir kādi jautājumi vai atsauksmes, droši atstājiet komentāru.