Heim System-Tutorial LINUX Detaillierte Erläuterung der Linux-Signalsatz-Betriebsfunktionen

Detaillierte Erläuterung der Linux-Signalsatz-Betriebsfunktionen

Feb 09, 2024 pm 03:30 PM
linux linux教程 linux系统 linux命令 shell脚本 typedef eingebettetes Linux Erste Schritte mit Linux Linux-Lernen

Lassen Sie uns zunächst einen Blick darauf werfen, was ein ausstehender Signalsatz ist. Wenn ein Signal erzeugt wird und sein Ziel erreicht, wird dieser Vorgang als Signalübermittlung bezeichnet. Der Zwischenzustand von der Signalerzeugung bis zur Übermittlung wird als anstehender Zustand des Signals bezeichnet. Der Grund für den anstehenden Status kann sein, dass das Signal blockiert ist, d. h. das entsprechende Bit im Signalmaskenwort (oder im blockierten Signalsatz) auf 1 gesetzt ist. Sowohl der Blockierungssignalsatz als auch der ausstehende Signalsatz werden vom Kernel verwaltet. Der gesamte Vorgang ist im Bild unten dargestellt:

Detaillierte Erläuterung der Linux-Signalsatz-Betriebsfunktionen

Manchmal müssen wir ein bestimmtes Signal blockieren, also müssen wir den Blockierungssignalsatz ändern. Wie ändern wir also den Blockierungssignalsatz? Eine vom System bereitgestellte Methode besteht darin, dass wir zunächst einen Satz erstellen, der mit dem Blockierungssignalsatz übereinstimmt, und diesen dann zum Ändern des Blockierungssignalsatzes verwenden.

Das System bietet eine Reihe von Signalsatz-Einstellungsfunktionen. Diese Funktionen sind wie folgt:

sigset_t  set;

信号集数据类型,本质是typedef unsigned long sigset_t; 

int sigemptyset(sigset_t *set);

将某个信号集清0

int sigfillset(sigset_t *set);

将某个信号集置1

int sigaddset(sigset_t *set, int signum);

将某个信号加入信号集

int sigdelset(sigset_t *set, int signum);

将某个信号清出信号集

以上几个函数返回值均是:成功:0;失败:-1

int sigismember(const sigset_t *set, int signum);

判断某个信号是否在信号集中

返回值:在集合:1;不在:0;出错:-1
Nach dem Login kopieren

Wie ändere ich den Blockiersignalsatz, nachdem ich den Signalsatz mit den oben genannten Funktionen erstellt habe? Das System bietet eine weitere Funktion: die Sigprocmask-Funktion. Die Sigprocmask-Funktion kann zum Blockieren oder Entsperren von Signalen verwendet werden. Ihr Kern besteht darin, den von uns erstellten Signalsatz zu verwenden, um den Blockierungssignalsatz zu ändern.

Funktionsprototyp:

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
Nach dem Login kopieren

Rückgabewert:

Erfolg: 0; Fehler: -1, Fehlernummer setzen

Parametererklärung:

set: Der eingehende Parameter ist eine Bitmap. Welches Bit im Set 1 ist, gibt an, welches Signal vom aktuellen Prozess blockiert wird.

oldset: Ausgehende Parameter, speichern Sie den alten Signalmaskensatz. Dies ähnelt in gewisser Weise dem Setitimer.

how-Parameterwert:

Angenommen, das aktuelle Signalmaskenwort ist mask

1.SIG_BLOCK: Wenn how auf diesen Wert eingestellt ist, gibt Set das Signal an, das blockiert werden muss. Entspricht mask = mask |. set

2.SIG_UNBLOCK: Wenn how darauf eingestellt ist, gibt Set das Signal an, das entsperrt werden muss. Entspricht mask = mask & ~set

3.SIG_SETMASK: Wenn how darauf eingestellt ist, stellt set den neuen Maskensatz dar, der zum Ersetzen der Originalmaske verwendet wird. Entspricht mask = set. Wenn der Aufruf von sigprocmask mehrere aktuelle Signale entsperrt, wird mindestens eines der Signale übermittelt, bevor sigprocmask zurückkehrt.

Wie lesen wir die Menge der ausstehenden Signale? Das System bietet die Signpending-Funktion.

Funktionsprototyp:

int sigpending(sigset_t *set);
Nach dem Login kopieren

Parameterbeschreibung:

Ausgehende Parameter festlegen.

Rückgabewert:

Rückgabewert: Erfolg: 0; Fehler: -1, set errno

Beispiel: Drucken Sie den ausstehenden Status aller regulären Signale auf dem Bildschirm aus.

#include 
#include 
#include 

void printPending(sigset_t *set)
{
    int i = 0;

    for (i = 0; i if (sigismember(set, i) == 1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
}

int main()
{
    sigset_t set, oldset, pendset;
    sigemptyset(&set);
    sigaddset(&set, SIGQUIT);   // ctrl + \ 将产生SIGQUIT信号
    sigprocmask(SIG_BLOCK, &set, &oldset);
    while (1) {
        sigpending(&pendset);
        printPending(&pendset);     // 写一个函数打印未决信号集
        sleep(1);
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Linux-Signalsatz-Betriebsfunktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ich kann mich nicht als Stamm bei MySQL anmelden Ich kann mich nicht als Stamm bei MySQL anmelden Apr 08, 2025 pm 04:54 PM

Die Hauptgründe, warum Sie sich bei MySQL nicht als Root anmelden können, sind Berechtigungsprobleme, Konfigurationsdateifehler, Kennwort inkonsistent, Socket -Dateiprobleme oder Firewall -Interception. Die Lösung umfasst: Überprüfen Sie, ob der Parameter Bind-Address in der Konfigurationsdatei korrekt konfiguriert ist. Überprüfen Sie, ob die Root -Benutzerberechtigungen geändert oder gelöscht und zurückgesetzt wurden. Stellen Sie sicher, dass das Passwort korrekt ist, einschließlich Fall- und Sonderzeichen. Überprüfen Sie die Einstellungen und Pfade der Socket -Dateiberechtigte. Überprüfen Sie, ob die Firewall Verbindungen zum MySQL -Server blockiert.

C Sprache Bedingte Zusammenstellung: Ein detaillierter Leitfaden für Anfänger zu praktischen Anwendungen C Sprache Bedingte Zusammenstellung: Ein detaillierter Leitfaden für Anfänger zu praktischen Anwendungen Apr 04, 2025 am 10:48 AM

C-Sprachbedingungskompilation ist ein Mechanismus zum selektiven Kompilieren von Codeblöcken, die auf Kompilierungszeitbedingungen basieren. Zu den Einführungsmethoden gehören: Verwenden von #IF- und #else -Direktiven, um Codeblöcke basierend auf den Bedingungen auszuwählen. Zu den häufig verwendeten bedingten Ausdrücken gehören STDC, _win32 und Linux. Praktischer Fall: Drucken Sie verschiedene Nachrichten entsprechend dem Betriebssystem. Verwenden Sie unterschiedliche Datentypen gemäß der Anzahl der Ziffern des Systems. Verschiedene Header -Dateien werden gemäß dem Compiler unterstützt. Die bedingte Kompilierung verbessert die Portabilität und Flexibilität des Codes und macht es an den Compiler-, Betriebssystem- und CPU -Architekturänderungen anpassbar.

【Rost-Selbststudie】 Einführung 【Rost-Selbststudie】 Einführung Apr 04, 2025 am 08:03 AM

1.0.1 Vorwort Dieses Projekt (einschließlich Code und Kommentare) wurde während meines Autodidakt-Rostes aufgezeichnet. Es kann ungenaue oder unklare Aussagen geben. Bitte entschuldigen Sie sich. Wenn Sie davon profitieren, ist es noch besser. 1.0.2 Warum ist Rustrust zuverlässig und effizient? Rost kann C und C mit ähnlicher Leistung, aber höherer Sicherheit ersetzen, und erfordert keine häufige Neukompilation, um auf Fehler wie C und C zu prüfen. Thread-Safe (stellen Sie sicher, dass Multi-Thread-Code vor der Ausführung sicher ist). Vermeiden Sie undefiniertes Verhalten (z. B. Array aus Grenzen, nicht initialisierte Variablen oder Zugriff auf den freien Speicher). Rust bietet moderne Sprachmerkmale wie Generika

Was sind die 5 grundlegenden Komponenten von Linux? Was sind die 5 grundlegenden Komponenten von Linux? Apr 06, 2025 am 12:05 AM

Die fünf grundlegenden Komponenten von Linux sind: 1. Der Kernel, Verwaltung von Hardware -Ressourcen; 2. Die Systembibliothek, die Funktionen und Dienste bereitstellt; 3. Shell, die Schnittstelle, in der Benutzer mit dem System interagieren können; 4. Das Dateisystem, das Daten speichert und organisiert; 5. Anwendungen, die Systemressourcen verwenden, um Funktionen zu implementieren.

Wie man MySQL löst, kann nicht gestartet werden Wie man MySQL löst, kann nicht gestartet werden Apr 08, 2025 pm 02:21 PM

Es gibt viele Gründe, warum MySQL Startup fehlschlägt und durch Überprüfung des Fehlerprotokolls diagnostiziert werden kann. Zu den allgemeinen Ursachen gehören Portkonflikte (prüfen Portbelegung und Änderung der Konfiguration), Berechtigungsprobleme (Überprüfen Sie den Dienst Ausführen von Benutzerberechtigungen), Konfigurationsdateifehler (Überprüfung der Parametereinstellungen), Datenverzeichniskorruption (Wiederherstellung von Daten oder Wiederaufbautabellenraum), InnoDB-Tabellenraumprobleme (prüfen IBDATA1-Dateien), Plug-in-Ladeversagen (Überprüfen Sie Fehlerprotokolle). Wenn Sie Probleme lösen, sollten Sie sie anhand des Fehlerprotokolls analysieren, die Hauptursache des Problems finden und die Gewohnheit entwickeln, Daten regelmäßig zu unterstützen, um Probleme zu verhindern und zu lösen.

Lösungen für die von MySQL auf einer bestimmten Systemversion gemeldeten Fehler Lösungen für die von MySQL auf einer bestimmten Systemversion gemeldeten Fehler Apr 08, 2025 am 11:54 AM

Die Lösung für den MySQL -Installationsfehler ist: 1. Überprüfen Sie die Systemumgebung sorgfältig, um sicherzustellen, dass die Anforderungen der MySQL -Abhängigkeitsbibliothek erfüllt werden. Unterschiedliche Betriebssysteme und Versionsanforderungen sind unterschiedlich. 2. Lesen Sie die Fehlermeldung sorgfältig durch und ergreifen Sie entsprechende Maßnahmen gemäß den Eingabeaufforderungen (z. B. fehlende Bibliotheksdateien oder unzureichende Berechtigungen), z. B. die Installation von Abhängigkeiten oder die Verwendung von SUDO -Befehlen; 3. Versuchen Sie bei Bedarf, den Quellcode zu installieren und das Kompilierungsprotokoll sorgfältig zu überprüfen. Dies erfordert jedoch eine bestimmte Menge an Linux -Kenntnissen und -erfahrung. Der Schlüssel zur letztendlichen Lösung des Problems besteht darin, die Systemumgebung und Fehlerinformationen sorgfältig zu überprüfen und auf die offiziellen Dokumente zu verweisen.

Kann MySQL auf Android laufen? Kann MySQL auf Android laufen? Apr 08, 2025 pm 05:03 PM

MySQL kann nicht direkt auf Android ausgeführt werden, kann jedoch indirekt mit den folgenden Methoden implementiert werden: Die Verwendung der Leichtgewichtsdatenbank SQLite, die auf dem Android -System basiert, benötigt keinen separaten Server und verfügt über eine kleine Ressourcennutzung, die für Anwendungen für Mobilgeräte sehr geeignet ist. Stellen Sie sich remote eine Verbindung zum MySQL -Server her und stellen Sie über das Netzwerk zum Lesen und Schreiben von Daten über das Netzwerk eine Verbindung zur MySQL -Datenbank auf dem Remote -Server her. Es gibt jedoch Nachteile wie starke Netzwerkabhängigkeiten, Sicherheitsprobleme und Serverkosten.

MySQL kann nach dem Herunterladen nicht installiert werden MySQL kann nach dem Herunterladen nicht installiert werden Apr 08, 2025 am 11:24 AM

Die Hauptgründe für den Fehler bei MySQL -Installationsfehlern sind: 1. Erlaubnisprobleme, Sie müssen als Administrator ausgeführt oder den Sudo -Befehl verwenden. 2. Die Abhängigkeiten fehlen, und Sie müssen relevante Entwicklungspakete installieren. 3. Portkonflikte müssen Sie das Programm schließen, das Port 3306 einnimmt, oder die Konfigurationsdatei ändern. 4. Das Installationspaket ist beschädigt. Sie müssen die Integrität herunterladen und überprüfen. 5. Die Umgebungsvariable ist falsch konfiguriert und die Umgebungsvariablen müssen korrekt entsprechend dem Betriebssystem konfiguriert werden. Lösen Sie diese Probleme und überprüfen Sie jeden Schritt sorgfältig, um MySQL erfolgreich zu installieren.

See all articles