Movatterモバイル変換


[0]ホーム

URL:


Ugrás a tartalomhoz
Wikipédia
Keresés

wait (Unix)

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából

Változat állapota

Ez a lap egy ellenőrzött változata

Ez aközzétett változat,ellenőrizve:2024. augusztus 25.

Pontosságellenőrzött

Await aUnix shell beépített parancsa. Arra szolgál, hogy megvárja a shellből háttérben indított program(ok) kilépését, és visszaadja a programok visszatérési értékét. Alakja:

wait [ -n ] [id... ]

id akár processz-, akár jobazonosító lehet. Ajobs -l beépített utasítás mindkét azonosítót kilistázza.

Aprocesszazonosítót az indított program a kerneltől kapja. Ha a háttérben több programot indítottunk egyszerre (például csővezetékkel összekapcsolva), mindegyik külön processz-számot kap. A processzekről az azonosítón felüli információkat aps paranccsal lehet lekérdezni.

Ajobazonosító egy%-jel utáni szám, melyet a shell ad minden háttér-indításkor. Ha több programot indítottunk egyszerre, a shellprocesszcsoportnak tekinti, és egyben kezeli őket.

A-n kapcsolónak akkor van jelentősége, ha jobid-ket adtunk meg. Await parancs akkor tér vissza, amikor a felsorolt programok/processzcsoportokbármelyike lefutott, és az első státusával tér vissza. Ha az-n-et nem adtuk meg, akkormindegyik felsorolt programot/processzcsoportot megvárja, és az utoljára befejeződött visszatérési értékét adja vissza.

Ha nem adunk megid-t, a shell az összes háttérben indított programot/processzcsoportot megvárja, és 0-t ad visszatérési értékként.

Program indítása háttérben

[szerkesztés]

Egy programot úgy indíthatunk háttérben, hogy az utasítás és paraméterek után&-jelet írunk. A jel egyúttal utasításhatároló is, így a sorban akár több háttérben indítandó utasítás is lehet.

Ha egy programot indítottunk, a háttérben indított processz azonosítóját a$! shell-változó tartalmazza.

Ha azt akarjuk, hogy a háttérben indított program több utasításból álljon, három lehetőségünk van. Az egyik:

prog1 ;prog2 &

A másik: kerek zárójelbe tesszük az indítandó utasítások sorozatát:

(prog1prog2)

Ez esetben a háttérben indított programok újabb programokat indíthatnak háttérben (a zárójelek egymásba skatulyázhatók). A zárójelbeli utasítások külön shellben hajtódnak végre.

A harmadik lehetőség: az utasításokat külön scriptbe írjuk. (A zárójel ugyanígy működik, csak nincs külön scriptneve.)

Példa

[szerkesztés]

A script:

sleep5&(sleep2;false)&MASODIK=$!sleep8&sleep3&jobs-lwait$MASODIKechoAmasodikprocesszvisszateresierteke:$?jobs-lsleep3&echoMegvarjuk,amigazosszeshatterprocesszvegeterwaitjobs-l
A kimenet:
[4] + 6626 Running[3] - 6625 Running[2]   6624 Running[1]   6623 RunningA masodik processz visszateresi erteke: 1[4] + 6626 Running[3] - 6625 Running[2]   6624 Done(1)[1]   6623 RunningMegvarjuk, amig az osszes hatterprocessz veget er[2] + 6628 Done[4] + 6626 Done[3] + 6625 Done[1] + 6623 Done

A kimenet első sorában[4] a job száma (%4-gyel lehet rá hivatkozni). A + a default job a bg és fg utasítás számára (lásdbash, job controll fejezet);%+-szal is lehet rá hivatkozni. (A második sorban a - a default processz kilépése után kijelölt default processz,%--szal is lehet rá hivatkozni.) Ezt követi a processz-szám és a job állapota,Done esetén a visszatérési értékkel, ha azt lekérdeztük.[1]

Jobon kívüli futtatás háttérben

[szerkesztés]

Az indított program szülője az&-et feldolgozó shell lesz. A program örökli a shell exportált változóit és nyitott fájljait, beleértve stdin-t, stdout-ot és stderr-t. Amikor a shell kilép, HUP (1-es) szignált küld az általa indított programoknak, melyek ettől általában ugyancsak kilépnek (bár megtehetik, hogy másképp kezelik le a HUP szignált).[2]

Anohup parancs úgy indítja el a paraméterként kapott programot, hogy az hagyja figyelmen kívül a HUP szignált:

nohupprogparam... &

Ezzel elkerülhető, hogy kijelentkezéskor leálljanak a háttérben indított programok.[3] Ha a programnak van a shell stdout-jára vagy stderr-jére írt kimenete, az az indítás könyvtárában anohup.out nevű fájlba kerül.

A már jobként indított háttérprogramok utólag is kivehetők a shell job-táblájából, bár ez esetben az stdin, stdout, stderr és a többi nyitott fájl marad az indításkori.[4] A paraméter nélkül kiadottdisown utasítás megváltoztatja az utoljára a háttérben indított program szülőjét. Ettől a háttérprogram függetlenedik az indító shelltől, így annak kilépése sem befolyásolja a futását.

Adisown utasítás-h kapcsolójával utólag elérhető, hogy a háttérprocessz ne fogadjon HUP szignált. Ilyenkor a szülője marad az indító shell, így ajobs utasítás mutatni fogja, de a shell kilépése után is tovább fut.

A gyakorlatban adisown helyett általában anohup parancsot használják.

Jegyzetek

[szerkesztés]
  1. Please explain the output from the jobs command (StackExchange)
  2. A shell parancssorból is tud szignált küldeni: lásdkill parancs.
  3. Természetesen nem kötelező anohup-ot háttérben indítani, bár a parancsot erre találták ki.
  4. Mire adisown utasításra sor kerül, a program már írhatott az örökölt nyitott fájlokba.

Források

[szerkesztés]

További információk

[szerkesztés]

Kapcsolódó szócikkek

[szerkesztés]
Unixparancssoros programok és utasítások
Fájlrendszer
Processzek
Felhasználói környezet
Szövegkezelés
Shell programozás
Hálózat
Keresés
Dokumentáció
Egyéb
A lap eredeti címe: „https://hu.wikipedia.org/w/index.php?title=Wait_(Unix)&oldid=27394186
Kategória:

[8]ページ先頭

©2009-2026 Movatter.jp