Online alkalmazások fejlesztése linux környezetben

Amikor a munkamenet vezetője (a héj) befejeződik, folyamatcsoportjai nehéz helyzetben vannak. Ha aktívak, nem használhatják a standard stdin és stdout streameket. mert a terminál zárva van. Ha leáll, akkor valószínűleg soha nem lehet újraindítani, nem azért, mert a terminál felhasználó a lehetőséget, hogy indítsa újra őket, amellett a tény, hogy nem lehet elindítani, azt is jelenti, hogy nem lehet megszakítani.

Ebben a helyzetben a folyamatok mindegyik csoportja a lógó (elárvult) nevet kapja. A POSIX szabvány határozza meg, mint egy folyamat-csoport, amelynek a szülő is tagja ennek a csoportnak, vagy nem tagja ennek a csoportnak a munkamenet. Más szóval, a folyamat csoport nem lóg ki, amíg van egy szülő egyazon ülésen, de a másik csoportban.

Habár mindkét meghatározás bonyolultnak tűnik, a koncepció elég egyszerű. Ha a folyamatcsoport felfüggesztésre kerül, és nincs olyan folyamat, amely arra kényszerítené, hogy újrainduljon, akkor ez a csoport felfüggesztésre kerül [33].

Amikor leáll a héj és a leszármazott folyamatok gyerekek az init folyamat, miközben az eredeti ülésén. Feltételezve, hogy minden program a munkamenet leszármazottai a héj, minden csoport a folyamatok ezen az ülésen lóg [34]. Ha egy csoportot átalakítjuk egy függő folyamatok, minden egyes folyamat a csoport kap SIGHUP jelet. amely rendszerint megszakítja a programot.

Programok, amelyeket a SIGHUP jel nem szakít meg. egy SIGCONT jelet kap. amely folytatja a felfüggesztett folyamatok végrehajtását. Az ilyen sorrend megszakítja a legtöbb folyamatot és biztosítja a fennmaradó alkalmazottak számára a munkalehetőséget (azaz biztosítja, hogy ne legyen felfüggesztett állapotban) [35].

Ha a folyamat lóg, akkor erőszakkal lehúzzák a beléptető terminál (amely lehetővé teszi egy új felhasználó számára, hogy a terminál, ha szükséges). Ha a futó programok megpróbálják elérni a terminált, ezek a kísérletek hibákat okoznak az EIO hibájára. Folyamatok maradnak ugyanabban a munkamenetben, és a munkamenet-azonosító nem használható új eljárás azonosítók mindaddig, amíg az összes folyamat befejeződött ezen az ülésen.

10.7. Bevezetés a ladshba

Annak érdekében, hogy illusztráljuk a könyvünkben tárgyalt ötleteket, a könyv következő részeiben a Unix-héj részhalmazát fejlesztjük ki. Végül a mi shell támogatja a következőket.

• Egyszerű beépített parancsok.

• Külső parancsok indítása.

• I / O átirányítás (>. | És így tovább).

A shell végleges változatának teljes forrásszövege, ladsh4.s. A B. függelékben találhatók. Mivel új eszközöket adnak a ladshhoz, a forrás szövegének módosításait a könyv szövege írja le. A verziók közötti változtatások számának csökkentése érdekében egyes korai verziók valamivel bonyolultabbak, mint amennyire szükségesek lennének. Ezek a kis szövődmények, de tovább a könyvben egyszerűsítik a héj fejlődését, ezért légy türelmes. Most csak úgy gondolják, hogy ezek a kódrészletek szükségesek; mindegyiket később magyarázzuk meg.

10.7.1. Külső programok futtatása a ladsh segítségével

Itt van a ladsh első (és legegyszerűbb) verziója. az úgynevezett ladsh1.

3: #include

4: #include

5: #include

6: #include

7: #include

8: #include

9: #include

10: #include

11: #include

12: #include

14: #define MAX_COMMAND_LEN 250 / * az egyén maximális hossza

15: parancssor * /

16: #define JOB_STATUS_FORMAT "[.]% - 22s% .40s \ n"

18: struct jobSet

19: strukturális munka * fej; / * a futási feladatok listájának címe * /

20: struktur feladat * fg; / * aktuális előtér munka * /

23: strukturális gyermekprogram

24: pid_t Pid; / * 0 a kimeneten * /

25: char ** argv; / * programnév argumentumokkal * /

29: int job Id; / * a feladat száma * /

30: int numProgs; / * a feladatok teljes száma * /

31: int runningProgs; / * futó programok száma * /

32: char * szöveg; / * munka neve * /

33: char * cmdBuf; / * különböző argv * /

34: pid_t pgrp; / * folyamat feladatcsoport ID * /

35: struct childProgram * progs; / * tömbök a feladatban * /

36: struct job * next; / * háttérprogramok nyomon követéséhez * /

39: void freeJob (struct job * cmd)

42: a (i = 0;numProgs; i ++)

43: szabad (cmd-> prog. [I] .argv);

De talán nem egyszerre. Lehet, hogy egy csoport a folyamatok, amelyek a folyamatokat, akinek a szülei tartoznak különböző csoport ugyanabban a munkamenetben. Mivel a kapcsolat „gyermek-szülő” a folyamatok közötti alkotnak egy fa, néha előfordulhat, hogy van egy csoport a folyamatok, amely csak azokat a folyamatokat, amelyek anyavállalata egy shell, és amikor ez a csoport a folyamatok megszűnik, a másik válik a lelógó.

A vita világosabbá válik, miután elolvasta a jelek fejezetét (12. fejezet) és a feladatkezelést (15. fejezet).

Kapcsolódó cikkek