várjon
olyan parancs, amely megvárja az adott feladatok befejezését, és visszaadja a várt parancs kilépési állapotát.
Mivel a várjon
parancs hatással van az aktuális shell végrehajtási környezetre, beépített parancsként valósul meg a legtöbb shellben.
Ebben a cikkben a Bash beépített változatát tárjuk fel várjon
parancs.
Bash várjon
Parancs #
A. Általános szintaxisa várjon
A beépített formátum a következő:
várjon [opciók] azonosítót
ID
a folyamat vagy a munka azonosítója. Ha nem ID
meg van adva, a parancs megvárja, amíg az összes gyermek háttérfeladata elkészül.
A várjon
A parancs visszaadja az utoljára várt parancs kilépési állapotát.
Például várni egy háttérfolyamatot PID-vel 7654
, használná:
várjon 7654
Több folyamat megadásakor a parancs megvárja az összes folyamat befejezését.
A munkákat a jobspecifikáció („jobspec”) segítségével adják meg, amellyel hivatkozhatunk a munkát alkotó folyamatokra. A munkakör egy százalékos szimbólummal kezdődik, amelyet a job száma követ (% n
). Íme egy példa:
Futtasson egy parancsot a háttérben:
rsync -a / home / tmp / home &
A shell job (zárójelekkel körülvéve) és a folyamat azonosítója megjelenik a terminálon:
[2] 54377
A munka megvárásához futtassa a várjon
parancs, amelyet a munkaköri specifikáció követ:
várjon% 2
Amikor a -n
opció esetén a parancs csak az adott pids vagy jobspecs egyetlen feladatának befejezését várja, és visszaadja a kilépési állapotát. Ha nem adnak meg érveket, várj -n
várja, hogy bármely háttérmunka befejeződjön és visszatérjen a jobból való kilépés állapotához.
várjon -n 45432 54346 76573
A fenti példában, várj -n
csak az előbb kilépő munka visszatérési állapotát nyomtatja ki; nem mutatja a munka PID-jét. Ha meg szeretné szerezni azt a job pid vagy jobspec-et, amelyre a kilépési állapot visszatér, használja a -o
opció hozzárendelni egy változóhoz:
várjon -p job_id -n 45432 54346 76573
-o
opciót bevezették a Bash 5-be.1. Ha régebbi Bash verziót használ, akkor egy „érvénytelen opció” hibát kap.
A -f
opció megmondja várjon
várni, amíg minden pid vagy jobspec ténylegesen megszűnik, mielőtt visszaküldené a kilépési kódot, ahelyett, hogy visszatérne, amikor a job állapota megváltozik. Ez az opció csak akkor érvényes, ha a jobvezérlés engedélyezve van. Alapértelmezés szerint a jobvezérlés csak interaktív felszólítások esetén engedélyezett.
Példák #
várjon
általában a párhuzamosan végrehajtott gyermekfolyamatokat létrehozó shell szkriptekben használják.
A parancs működésének bemutatásához hozza létre a következő parancsfájlt:
#!/ bin / bash sleep 30 & process_id = $! echo "PID: $ process_id" várjon $ process_id echo "Kilépés állapota: $?"
Magyarázzuk el a kódot soronként:
- Az első sor neve shebang, és megmondja az operációs rendszernek, hogy melyik tolmácsot használja a fájl többi elemzéséhez.
- A
alvás
parancs egy időigényes háttérfolyamat utánzásához. $!
egy belső Bash változó, amely az utolsó futtatott job PID-jét tárolja a háttérben. Ebben a példában ez aalvás
parancs. A PID-t egy változóban tároljuk (process_id
).- Kiírja a PID számot.
- A PID továbbításra kerül a
várjon
parancs, amely megvárja aalvás
parancs befejeződik. - Kiírja a
várjon
parancs.$?
egy belső Bash változó, amely az utoljára végrehajtott parancs kilépési állapotát tartja.
Ha futtatja a szkriptet, akkor valami ilyesmit nyomtat:
PID: 36353 Kilépés állapota: 0
Itt egy példa a -n
választási lehetőség:
#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Az első munka befejezve."várj visszhangot" Minden munka befejeződött."
A parancsfájl végrehajtása után 3 háttérfolyamat keletkezik. várj -n
megvárja, amíg az első feladat elkészül, és az echo utasítás kinyomtatásra kerül. várjon
várja az összes gyermek háttérmunkájának befejezését.
az első munka befejezte az összes befejezett munkát
Az utolsó példa elmagyarázza a -f
választási lehetőség. Nyissa meg a terminált és futtassa:
alvás 3600 &
[1] 46671
Várja meg a folyamatot:
várjon 46671
Nyisson meg egy másik terminált, és állítsa le a folyamatot a megöl
parancs:
kill -STOP 46671
A folyamat állapotának megváltoztatása után a várjon
parancs befejezi és visszaadja a folyamat kilépési kódját.
Most ismételje meg ugyanazokat a lépéseket, de ezúttal használja várj -f $ pid
:
alvás 3600 &
várj -f 46671
Állítsa le a folyamatot a másik terminálról:
kill -STOP 46671
Ezúttal a várjon
parancs nem fejeződik be. Addig fog működni alvás
a folyamat befejeződik.
Következtetés
A várjon
A parancs megvárja a megadott feladatok befejezését, és visszaadja a job kilépési kódját.
Ha bármilyen kérdése vagy visszajelzése van, nyugodtan írjon megjegyzést.