Normál vagy normál jelek:
A fejlécfájl jelét.h 'jelek vannak megadva makroállandóként. A jel címe „SIG” -vel kezdődött, és egy rövid jeláttekintés előzi meg. Következésképpen bármelyik jelnek külön számértéke van. A programkódnak a jel nevét kell használnia, nem több jelet. Ennek oka az, hogy a jelek száma a rendszertől függően változhat, de a nevek értelmezése szabványos. Az alábbiakban néhány szabályos jelet definiálunk, amelyeknek a funkciói meg vannak határozva.
SIGHUP:
Ez a jel felfüggeszti a feldolgozást. A SIGHUP jelet a felhasználói terminál szétválasztásának jelzésére hívják fel, valószínűleg egy távoli kommunikáció megszakadása vagy letétele miatt.
JEL:
Megzavarja a folyamatot. A SIGINT jel akkor érkezik, amikor a felhasználó bevezeti az INTR kulcsot (általában Ctrl + C).
JELENLEG:
Leállítja vagy kilép a feldolgozásból. A SIGQUIT jel akkor érkezik, amikor a felhasználó megadja a QUIT gombot (általában Ctrl + \).
SIGILL:
Akkor fut, amikor tiltott parancs történt. A SIGILL jel akkor jön létre, amikor egy ócska vagy privilegizált parancs végrehajtására törekszenek. Amikor a verem túlcsordul, és a gépnek problémái vannak egy jelvezérlő futtatásával, akkor létrehozható a SIGILL is.
SIGTRAP:
Akkor hívják, amikor valamilyen nyomkövető utasítást hajtanak végre. A SIGTRAP jelet töréspont paranccsal és egy újabb csapda paranccsal hozzák létre. A hibakereső ilyen jelet használ.
SIGABRT:
Abort jelnek hívják. A SIGABRT jel az abort () metódus meghívásával jön létre. Egy ilyen jel arra szolgál, hogy rámutasson az abort () metódus által korábban említett és rögzített kód által észlelt pontatlanságra.
JELENTÉS:
Kivétel a lebegőpontokról; A SIGFPE jel akkor jön létre, amikor katasztrofális matematikai hiba történik.
SIGUSR1 és SIGUSR2:
A SIGUSR1 és SIGUSR2 jeleket tetszés szerint lehet használni. A folyamatok közötti egyszerű interakció szempontjából előnyös egy jelkezelő létrehozása az ilyen jelek számára abban az alkalmazásban, amelyik jelet kap.
A jelek alapértelmezett viselkedése:
Minden jelnél szokásos viselkedés vagy művelet van, és az alapértelmezett viselkedést a kezelő funkcióval lehet módosítani. Az automatikus SIGKILL és SIGABRT jel viselkedését nem lehetett módosítani vagy elhanyagolni.
Időtartam: Megszünteti a műveletet.
Mag: Létrejön egy alapdokumentum, és a művelet befejeződik.
Ign: A folyamat figyelmen kívül hagyna egy jelet.
Álljon meg: Megállítja a műveletet.
Cont: A műveletet a leállításától tartják fenn.
Jelkezelés:
A folyamat előnyben részesíti a jel viselkedését, amikor nyugtázzák. A folyamat a következőképpen viselkedhet:
A jel automatikusan elvetődik, ha figyelmen kívül hagyja a megadott jel viselkedését.
Olyan módszerek alkalmazásával, mint a jel vagy a jelzés, a kód regisztrálhat egy kezelő funkciót. Úgy hívják, hogy elkap egy jelet egy kezelőtől.
Ha egy jelet nem kezelnek vagy elhanyagolnak, a szokásos művelet történhet.
A Jelkezelés funkciót a következőképpen definiálhatja:
$ Int jel () int jelző, érvénytelen (* funk) (int))Amikor a feldolgozás jeljelet kap, a jel () metódus hívhatja a „func” metódust. A Signal () visszaállítja a mutatót a „func” metódusra, ha ez virágzik, vagy kivételt ad vissza az errno és -1 helyett.
A „func” mutató három értékre képes:
SIG_DFL: Ez egy mutató a fejlécben definiált standard SIG DFL () metódusra.h a jel szokásos viselkedésének megismerésére használt dokumentum.
SIG_IGN: Ez egy hivatkozás a fejlécben megadott SIG IGN () ignore módszerre.h dokumentum.
Felhasználó által meghatározott kezelő módszer mutató: A felhasználó által definiált void (*) (int) típusú kezelő metódus azt jelenti, hogy a return kategória érvénytelen, és hogy a magányos argumentum int.
Hozzon létre egy új fájl jelet.c ', és írja alá a jelkezelő kódot.
Kapcsolja össze a jelet.c fájl a gcc-vel.
A jel futtatása közben.c fájlt, egy végtelen ciklust kapunk, amelyet a fő módszerrel hajtunk végre. A CTRL + C megnyomásakor elindította a kezelő módszert, és a fő módszer végrehajtása leállt. A fő módszer feldolgozása a kezelő módszer megvalósulása után is folytatódott. A Ctrl + \ megnyomásakor a művelet kilép.
Jel figyelmen kívül hagyása:
A jel figyelmen kívül hagyása érdekében hozzon létre egy fájl jelet.c ', és írja be a kód alá.
Kösse a figyelmen kívül hagyást.c fájl a gcc-vel.
Futtassa a jelet.c fájl. Érintse meg a CTRL + C billentyűkombinációt, létrejön a SIGNIT jel; mindazonáltal a viselkedés észrevétlen, mert a kezelő metódust SIG_IGN () metódusba soroljuk.
Újra regisztrálja a jelkezelőt:
A jelkezelő újraregisztrálásához hozzon létre egy új fájlt 'rereg.c 'és írja be az alábbi kódot:
Társítsa a rereget.c fájl a gcc-vel.
Futtassa a rereget.c fájl. Míg először megnyomta a CTRL + C kezelő módszert, a jelkezelő újra regisztrált a SIG_DFL-be. A CTRL + C ismételt megnyomása közben a végrehajtás leállt.
Jelek küldése az Emelés () használatával:
Hozzon létre egy fájlt.c 'és adja hozzá az alábbi kódot. Jelek küldéséhez a hívó módszerhez az emelés () metódust alkalmazzák.
Kapcsolja össze a küldést.c fájl a gcc-vel.
A folyamat a raise () metódust használja a SIGUSR1 jel önálló továbbítására.
Jelek küldése a Kill () használatával:
Adja hozzá az alábbi kódot az 'emeléshez.c '. A kill módszerrel () jeleket küldhet a folyamatcsoportnak.
Kapcsolja össze az emelést.c fájl a gcc-vel.
A kill () módszer alkalmazásával a folyamat a SIGUSR1 jelet a fent említettre irányítja.
Szülő-gyermek interakció:
A szülő-gyermek interakció megtekintéséhez írja be az alábbi kódot egy fájlba.
Kötelezze a komm.c fájl a gcc-vel.
A Fork () / method generálja a gyermeket, nulla értéket állít vissza a gyermek folyamatra, és a gyermek azonosítóját a szülőnek.
Következtetés:
Ebben az útmutatóban láthattuk, hogyan lehet létrehozni, kezelni, elküldeni, figyelmen kívül hagyni, újra regisztrálni és felhasználni a jelet a folyamatok közötti interakciókhoz a Linuxban.