Dankzij het signaleringsmechanisme in de Linux-kernel kunnen draaiende applicaties het systeem asynchroon op de hoogte stellen wanneer zich een nieuwe gebeurtenis voordoet. Vanwege zijn aard staat dit signaleringsmechanisme algemeen bekend als software-interrupts. Net als hardware-interrupts, onderbreken signalen de normale stroom van een applicatie, en het is onvoorspelbaar wanneer een applicatie een signaal ontvangt.

Laten we diep in het signaleringsmechanisme in Linux duiken en begrijpen wat er achter de schermen gebeurt.

Basissignaalconcepten in Linux

Op Linux genereren processen signalen in drie basissituaties:

  • Wanneer zich aan de hardwarekant een uitzonderlijke situatie voordoet. U kunt bijvoorbeeld denken aan gebeurtenissen zoals de toepassing die probeert toegang te krijgen tot een regio buiten de toegestane adresruimte (segmentatiefout) of het genereren van machinecode die een deling door nul bevat operatie.
  • Situaties zoals het gebruik van toetscombinaties zoals Ctrl + C of Ctrl + Z
    instagram viewer
    op de console door de gebruiker, het formaat van het consolescherm wijzigen of een kill-signaal verzenden.
  • De timer die in de applicatie is ingesteld, loopt af, de CPU-limiet die aan de applicatie wordt gegeven, is hoog, de gegevens komen naar een open bestandsdescriptor, enz.

Het concept van signalen bestaat al sinds de vroege versies van Unix. Voorheen waren er verschillende verschillen tussen Unix-versies met betrekking tot signaalverwerking. Later, met de POSIX-standaardisatie gemaakt voor signaalbeheer, begonnen Linux en andere Unix-derivaten deze standaarden te volgen. Om deze reden wijzen de concepten van Unix-signalen en POSIX-signalen, die u in sommige documenten kunt tegenkomen, op de verschillen.

Signaalnummers

Signalen hebben verschillende numerieke waarden, te beginnen met één. Signaal 1 is bijvoorbeeld a HUP signaal in bijna elk systeem, of signaal 9 is a DODEN signaal.

Het gebruik van deze nummers wordt echter sterk afgeraden wanneer u signalen in uw toepassingen gebruikt. Voor POSIX-signalen, signaal.h bestand moet in de applicatie zijn en de ontwikkelaar moet de constante definities van gerelateerde nummers gebruiken, zoals: SIGHUP, SIGKILL, enz. in plaats van.

Als je de /usr/include/signal.h bestand op uw systeem, kunt u de extra bewerkingen en andere opgenomen bestanden zien door te kijken naar de definities van waarden zoals: __USE_POSIX, __USE_XOPEN, __USE_POSIX199309, enz. in het bestand. U vindt de beschikbare signaalnummers op Linux-systemen in de /usr/include/asm-generic/signal.h bestand, dat u niet rechtstreeks in uw toepassingscode hoeft op te nemen.

Signaal genereren en verzenden

Signaalgeneratie vindt plaats als gevolg van een gebeurtenis. Het verzenden (afgeven) van het signaal naar de betreffende applicatie vindt echter niet gelijktijdig plaats met het genereren van het signaal.

Om het signaal naar de applicatie te sturen, moet de applicatie momenteel actief zijn en CPU-bronnen hebben. Het verzenden van een signaal naar een specifieke applicatie vindt dus plaats wanneer de betreffende applicatie weer gaat werken na de contextwisseling.

Het hangende signaalconcept

Gedurende de tijd van het genereren tot het verzenden van het signaal bevinden de signalen zich in een standby-toestand. U kunt toegang krijgen tot het aantal wachtende signalen en het aantal wachtende signalen dat is toegestaan ​​voor een proces vanuit de /proc/PID/status het dossier.

# Voor een proces met PID: 2299
cat /proc/2299/status

# Uitgang
...
SigQ: 2/31630
...

Signaalmaskers en blokkering

Het exacte tijdstip waarop de signalen zullen aankomen is vaak onvoorspelbaar door de applicatie. Daarom kunnen er tijdens elke bewerking enkele kritieke onderbrekingen optreden. Dit kan voor een grootschalige toepassing grote problemen opleveren.

Om dit soort ongewenste situaties te voorkomen, is het noodzakelijk om signaalmaskers te gebruiken. Zo is het mogelijk om enkele signalen te blokkeren voor een kritische operatie. In dit stadium is het belangrijk om het kritieke deel te voltooien en de gedefinieerde blokken te verwijderen. Dit proces is iets waar de applicatieontwikkelaar op moet letten.

Wanneer de applicatie een signaal blokkeert, zullen andere gegenereerde signalen van hetzelfde type in een wachttoestand zijn totdat de blokkering wordt opgeheven. In de applicatie wordt ook voorzien in het verzenden van hangende signalen zodra de blokkering wordt verwijderd.

Op deze manier worden dezelfde typen signalen die op het moment van de blokkering in de wacht zijn gezet, slechts één keer naar de applicatie verzonden nadat de blokkering bij normaal gebruik is verwijderd. De situatie is anders voor realtime signalen.

Linux-signaaltypen

Standaardacties kunnen per signaaltype verschillen. Als de applicatie die het bijbehorende signaal ontvangt geen signaalverwerkingsfunctie heeft, vindt de standaardactie plaats. Soms betekent dit het beëindigen van de applicatie en soms het negeren van het signaal.

Sommige signalen kunnen niet worden opgevangen op de applicatielaag, deze signalen voeren altijd de standaardactie uit (zoals het KILL-signaal).

Naast enkele acties die ervoor zorgen dat een toepassing wordt beëindigd, wordt er ook een kerndumpbestand geproduceerd. Core dump-bestanden, gemaakt door de virtuele geheugentabel van het gerelateerde proces naar schijf te schrijven, helpen de gebruiker om de statusinformatie te onderzoeken voordat het proces eindigt met foutopsporingstools in de volgende fasen.

De volgende waarden zijn gebaseerd op een voorbeeldige MIPS-architectuur:

Signaal Nummer Standaardactie Kan het worden gepakt?
SIGHUP 1 Aanvraag beëindigen Ja
SIGINT 2 Aanvraag beëindigen Ja
SIGQUIT 3 Applicatie beëindigen (core dump) Ja
SIGILL 4 Applicatie beëindigen (core dump) Ja
SIGTRAP 5 Applicatie beëindigen (core dump) Ja
SIGABRT 6 Applicatie beëindigen (core dump) Ja
SIGFPE 8 Applicatie beëindigen (core dump) Ja
SIGKILL 9 Aanvraag beëindigen Nee
SIGBUS 10 Applicatie beëindigen (core dump) Ja
SIGSEGV 11 Applicatie beëindigen (core dump) Ja
SIGSYS 12 Applicatie beëindigen (core dump) Ja
SIGPIPE 13 Aanvraag beëindigen Ja
SIGALRM 14 Aanvraag beëindigen Ja
SIGTERM 15 Aanvraag beëindigen Ja
SIGUSR1 16 Aanvraag beëindigen Ja
SIGUSR2 17 Aanvraag beëindigen Ja
SIGCHLD 18 Negeren Ja
SIGTSTP 20 Hou op Ja
SIGURG 21 Negeren Ja
SIGPOLL 22 Aanvraag beëindigen Ja
SIGSTOP 23 Hou op Nee
SIGCONT 25 Doorgaan indien gestopt Ja
AANMELDEN 26 Hou op Ja
SIGTTOU 27 Hou op Ja
SIGVTALRM 28 Aanvraag beëindigen Ja
SIGPROF 29 Aanvraag beëindigen Ja
SIGXCPU 30 Applicatie beëindigen (core dump) Ja
SIGXFSZ 31 Applicatie beëindigen (core dump) Ja

Levenscyclus van signalen in Linux

Signalen doorlopen drie fasen. Ze worden voornamelijk geproduceerd in de productiefase, door de pit of een ander proces, en worden weergegeven door een nummer. Ze werken licht en snel, omdat ze niet extra belast worden. Maar als je naar de POSIX-kant kijkt, zie je dat realtime signalen extra data kunnen verzenden.

De leveringsfase voor de signalen komt na de productiefase. Normaal gesproken bereiken signalen de applicatie zo snel mogelijk vanuit de kernel. Soms kunnen toepassingen echter signalen blokkeren tijdens het uitvoeren van kritieke bewerkingen. In dergelijke gevallen blijft het signaal in afwachting totdat de transactie plaatsvindt.

Net als signalen zijn processen ook een integraal onderdeel van het Linux-ecosysteem. Begrijpen wat processen zijn en hoe ze werken, is cruciaal als je van plan bent om Linux-systeembeheerder te worden.

Wat is een proces in Linux?

Lees volgende

DeelTweetenDeelE-mail

Gerelateerde onderwerpen

  • Linux
  • Linux-kernel
  • Systeem administratie

Over de auteur

Fatih Küçükkarakurt (9 artikelen gepubliceerd)

Een ingenieur en softwareontwikkelaar die een fan is van wiskunde en technologie. Hij heeft altijd van computers, wiskunde en natuurkunde gehouden. Hij heeft zowel game-engine-projecten als machine learning, kunstmatige neurale netwerken en lineaire algebra-bibliotheken ontwikkeld. Bovendien blijft men werken aan machine learning en lineaire matrices.

Meer van Fatih Küçükkarakurt

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren