Munka menedzsment

A UNIX-szerű operációs rendszerek jobkezelése a UNIX shell kötegelt jobok manipulálására szolgáló eszközök készlete , különösen interaktív módban, ahol a „job” egy folyamatcsoport shell-ábrázolása .

Legegyszerűbb esetben a jobvezérlés egy job (vagyis egy folyamatcsoportban lévő összes folyamat) végrehajtásának szüneteltetéséből, folytatásából vagy leállításából áll, de magában foglalhatja egy másik jel küldését is a jobnak . Ellentétben a jobvezérlő blokk fogalmával ( kötegelt  módban történő soros végrehajtáshoz használatos), a jobvezérlés egy egyéni eszközkészletet foglal magában az interaktív eszközök kötegelt móddal való munkához.

Áttekintés

A legtöbb felhasználói feladat [1] terminálon (vagy terminálemulátoron ) keresztül történő futtatáskor – könyvtárak böngészése, fájlok szerkesztése és így tovább – úgy történik, hogy a vezérlést átadja a programoknak, és a vezérlést visszaadja a shellnek, amikor a program kilép a szabványos bemeneten és a szabványos kimeneten keresztül. a terminálról olvasott shell-re, vagy írjon bele és fogadja a billentyűzetről küldött jeleket, mint például a Control+ C.

Előfordulhat azonban, hogy a felhasználónak más célból kell végrehajtania egy feladatot a terminál használatával – egy olyan feladatot, amely fut, de nem fogadja el a terminálbevitelt, háttérfeladatnak, míg az egyetlen olyan feladatot, amely fogadja a terminál bemenetét, előtérbeli jobnak nevezzük. A Job Control egy olyan eszköz, amelyet arra terveztek, hogy ezt lehetővé tegye, és lehetővé teszi a felhasználó számára, hogy folyamatokat indítson a háttérben, előtérbeli folyamatokat küldjön a háttérbe, háttérfolyamatokat állítson előtérbe, és elindítson és leállítson folyamatokat ( felfüggesztés, folytatás, befejezés ) . 

A "job" fogalma leképezi az egyetlen shell parancs fogalmát egy operációs rendszer fogalmára, ahol sok folyamat indítható el egyetlen paranccsal. Pontosabban, egyetlen feladat több folyamatból állhat: egy adott folyamat további utódfolyamatokat hozhat létre, amelyek viszont létrehozhatják saját utódfolyamataikat, és így tovább, és egyetlen shell-parancs állhat sok kapcsolódó folyamat folyamatából . Ezeket az operációs rendszer egyetlen folyamatcsoportként kezeli (a csoport összes folyamata ugyanazt a PGID-t használja), és a shell folyamatcsoport belső reprezentációja egy feladat. Ez a POSIX -ben a következőképpen definiálható : [2]

Folyamatok halmaza, beleértve a shell folyamatot és a tőle függő folyamatokat, amelyek mind ugyanannak a folyamatcsoportnak a tagjai.

A folyamatok egy csoportja így egyetlen héjként, egyetlen feladatként kezelhető. A jobra viszont hivatkozhat az [3] leíró , a job vezérlőjének folyamatazonosítóját a shell beépített parancsa használja a jobra való hivatkozáshoz. A munkaazonosítók karakterrel kezdődnek  ; nevű feladatot határozza meg , míg az aktuálisat. A többi jobazonosítót a POSIX [4] határozza meg . A Bash dokumentációja a (%-előtaggal) feladatspecifikációként hivatkozik [5] . %%%nn%%

A feladatvezérlőket és a jobazonosítókat általában csak interaktív használatban használják, ahol megkönnyítik a folyamatcsoportokra való hivatkozást; A PGID-ket gyakran használják helyette a szkriptekben, mert pontosabbak és robusztusabbak, és a folyamatvezérlés alapértelmezés szerint le van tiltva a Bash-szkriptekben.

Példa

A felhasználó az adott munkameneten belüli feladatokat beépített shell-parancsokkal, például jobs, fgvagy bg.

Egy diagramban szereplő feladat egyenértékű egy folyamatcsoporttal. A PPID a szülőfolyamat azonosítója. SID – munkamenet azonosító. TTY - vezérlőterminál.

Történelem

A Job Controlt először Jim Culp [6] Csh shellben valósította meg, majd az ausztriai MIPSA -nál a 4.1 BSD kernel szolgáltatásait használva , és a Bell Labs által kifejlesztett Korn (ksh) shellben alkalmazta. Később bekerült a Bourne (sh) shell SVR4 verziójába , és azóta a legtöbb modern Unix shellben létezik.

Alkalmazás

A shell általában a folyamattáblázatban tartja a feladatok listáját. A jobs parancs felsorolja a folyamattáblában létező háttérfeladatokat, valamint az egyes folyamatok számát és állapotát (leállított vagy futó). A disown paranccsal eltávolíthatók a jobok a folyamattáblából, és jobokból démonokká alakíthatók át, így azok akkor is futhatnak, ha a felhasználó kijelentkezik .

CtrlAz "előtérben" futó job karakterek ( + Z) beírásával leállítható . Ez jelet SIGTSTP küld a folyamatcsoportnak. Az alapértelmezett SIGTSTPparancs leállítja a megfelelő folyamatokat, és átadja a vezérlést egy parancsértelmezőnek. A folyamat azonban vagy regisztrálhatja a jel tokent, vagy figyelmen kívül hagyhatja a SIGTSTP. A folyamatot egy olyan jel is megállíthatja, amelyet SIGSTOPnem lehet elfogni vagy figyelmen kívül hagyni.

A leállított job háttérfeladatként folytatható a bg shell paranccsal, vagy előtérbe hozható az fg paranccsal . Mindkét esetben a shell ennek megfelelően átirányítja az I/O -t, és jelet küld a folyamatnak SIGCONT, aminek hatására az operációs rendszer folytatja a végrehajtást. A Bash shellben egy program háttérfeladatként futtatható, ha a parancssorba egy „és” jelet ( & ) adunk; a kimenete is a terminálra van irányítva (potenciálisan más programok kimeneteivel átlapolva), de ebben az esetben nem tud olvasni a terminál bemenetéről.

A háttérfolyamat, amely megpróbál olvasni vagy írni a vezérlő termináljáról , jelet küld SIGTTIN(bemenetre) vagy SIGTTOU(kimenetre). Ezek a jelek alapértelmezés szerint leállítják a folyamatot, de más módon is kezelhetők. A shell-ek gyakran felülírják az alapértelmezett leállítási műveletet SIGTTOU, így a háttérfolyamatok az alapértelmezett kimenetet adják a vezérlő terminálnak. A Bash-kompatibilis shellekben a kill beépített folyamatazonosítóval, valamint folyamatcsoport-azonosítóval is jelezheti a jobokat - úgy, hogy a jobot a teljes folyamatcsoportja felé jelzi, az azonosítóval meghatározott jobokat pedig a " % " előtag elküldésével kell "megölni". SIGKILLA Kill bármilyen jelet küldhet egy feladatnak, de ha a folyamatok rendszerének megszabadítása a cél, akkor valószínűleg a és SIGTERM(alapértelmezett) jelek a legmegfelelőbbek . Az előtérben futó job véglegesen leállítható a "kill process" parancs karaktereinek ( Ctrl+ C) beírásával.

Jegyzetek

  1. Itt a "feladat" nem technikai kifejezés bizonyos tevékenységekre, míg a "folyamat" és a "feladat" az operációs rendszerek területéről származó speciális fogalmak.
  2. IEEE Std 1003.1-2001, 3.201. szakasz, Munka archiválva : 2010. október 9. a Wayback Machine -nél
  3. Az azonosító egy absztrakt shell-hivatkozás az operációs rendszer által külsőleg kezelt erőforrásra (folyamatcsoportra), ezért ez egy kezelő
  4. IEEE Std 1003.1-2001, 3.203 szakasz, Job Control Job ID archiválva : 2010. október 9. a Wayback Machine -nél
  5. 7.1 Job Control alapok . Letöltve: 2015. november 14. Az eredetiből archiválva : 2015. október 29.
  6. Bill Joy előszava: Anderson , Gail; Paul Anderson. A UNIX C Shell Field Guide (neopr.) . - Prentice-Hall , 1986. - S. xvii. ISBN 0-13-937468-X .  

Irodalom

Linkek