A parancsvégrehajtás folyamata

Az alábbiakban azt a folyamatot tekintjük át, amelynek során egy általunk begépelt parancssorozatot végrehajt a shell.

Ha a végrehajtandó parancs a C shell egy beépített parancsa, a shell felismeri azt, és rögtön végrehajtja. Ha nem belső parancsról van szó, a shell a megadott nevű, végrehajtási jogokkal rendelkező fájlt fogja keresni az állományrendszerben. Ha a fájlnév abszolút elérési útvonallal van megadva, tehát a '/' karakterrel kezdődik, a keresési útvonal egyből adott; ha relatív elérési útvonallal van a fájlnév megadva, a shell a path változóban szereplő katalógusokban fogja keresni a fájlt. (E keresés felgyorsítására a csh belső táblákban, az ún. hash-elési eljárással indexelve nyilvántartja a keresési útvonalakon található összes végrehajtható fájlt. E belső táblákat a rehash paranccsal tudjuk felfrissíteni, az unhash paranccsal pedig a használatát letiltani.)

Ha a parancsnév nem tartalmaz katalógus részt, a shell összeveti a nevet az érvényes aliasok listájával; ha valamelyik alias névvel egyezik, a shell kifejti az aliast a definíció szerint, s az így adódó új névvel, a kifejtett alias első argumentumával dolgozik tovább, ha szükséges, újabb alias kifejtéseket hajtva végre. Az alias-kifejtéskor a parancsnéven kívüli keletkezett pótlólagos argumentumok befűződnek az eredeti argumentumlistába.

Ha a shell végül megtalálta a kívánt fájlt a megfelelő végrehajtási jogokkal, elindít egy új folyamatot, és ennek az új folyamatnak adja át végrehajtásra a futtatandó program nevét és argumentumait (pontosabban szólva ezt az új folyamatot fogja felülírni a futtatandó programmal). A futtatandó program típusától függően négyféle módon történhet a fájl végrehajtása.

Ha a futtatandó program szabványos, úgynevezett a.out formátumú bináris végrehajtható állomány, a kernel felülírja vele az új folyamatot és rögtön végrehajtja.

Ha a fájl nem bináris, hanem szövegfájl, és a '#!' karakterekkel kezdődik, akkor a '#!' karakterek utáni argumentummal megnevezett programot fogja a

kernel a végrehajtó programnak tekinteni, elindítja azt az új folyamat helyén, argumentumként átadva neki a végrehajtandó fájl nevét.

Ha a fájl szövegfájl ugyan, de nem a '#!' karakterekkel kezdődik, a fájl első karakterétől függően megint csak két eset lehetséges: ha a fájl első karaktere a '#' karakter, az új folyamat helyén egy C shell indul el, és az hajtja végre a fájlt; bármi más esetben a standard Bourne shell fog elindulni.

 

Tartalomjegyzék