Freigeben über


Signal

Satz-Unterbrechungssignalbehandlung.

Wichtiger HinweisWichtig

Verwenden Sie diese Methode nicht, um eine Windows Store-App, außer in Tests oder Debugszenarios herunterzufahren.Programmgesteuerte oder Benutzeroberfläche-Methoden, eine Windows Store-App zu schließen werden nicht äquivalent Abschnitt 3,6 von Windows 8-App-Zulassungsbedingungen zulässig.Weitere Informationen finden Sie unter Anwendungslebenszyklus (Windows Store-Apps).

void (__cdecl *signal( int sig, void (__cdecl *func ) (int [, int ] ))) (int);

Parameter

  • sig
    Signalisieren Sie Wert.

  • func
    Wird ausgeführt werden Funktion.Der erste Parameter ist ein Signalwert und der zweite Parameter ist ein SubCode, der verwendet werden kann, wenn der erste Parameter SIGFPE ist.

Rückgabewert

signal gibt den vorherigen Wert von func wurde mit dem angegebenen Signal zurück.Wenn beispielsweise der vorherige Wert von funcSIG_IGN war, ist der Rückgabewert auch SIG_IGN.Ein Rückgabewert von SIG_ERR gibt einen Fehler an, in diesem Fall errno zu EINVAL festgelegt ist.

Siehe _doserrno, errno, _sys_errlist und _sys_nerr weitere Informationen über diese und andere, Rückgabecodes.

Hinweise

Die signal-Funktion kann ein Prozess, um eine von mehreren Methoden auszuwählen, ein Unterbrechungssignal vom Betriebssystem zu behandeln.Das sig-Argument ist die Unterbrechung, auf die signal reagiert; muss es eine der folgenden Manifesten Konstanten sein, in SIGNAL.H. definiert.

sig-Wert

Beschreibung

SIGABRT

Nicht ordnungsgemäß beendet

SIGFPE

Gleitkommafehler

SIGILL

Nicht interpretierbarer Befehl

SIGINT

STRG+C-Signal

SIGSEGV

Ungültiger Speicherzugriff

SIGTERM

Abschlussanforderung

Wenn sig keiner der oben aufgeführten Werte ist, wird der ungültige Parameterhandler aufgerufen, wie in Parametervalidierung definiert.Wenn die Ausführung zulässig ist, um fortzufahren, gibt Sätze errno dieser Funktion zu EINVAL und SIG_ERR zurück.

Standardmäßig beendet signal das aufrufende Programm mit Exitcode 3, unabhängig von den Wert von sig.

HinweisHinweis

SIGINT wird nicht für eine Win32-Anwendung unterstützt.Wenn eine STRG+C-Unterbrechung auftritt, generieren Win32-Betriebssysteme einen neuen Thread, um diese Unterbrechung speziell zu behandeln.Dies kann eine einsträngige Anwendung wie eine in UNIX verursachen, mit dem Ergebnis des unerwarteten Verhaltens Multithreadanwendungen zu werden.

Das func-Argument ist eine Adresse auf einen Signalhandler, den Sie schreiben, oder eine der vordefinierten Konstanten SIG_DFL oder SIG_IGN, auch in definiert. SIGNAL.H.Wenn func eine Funktion ist, wird sie als der Signalhandler für das angegebene Signal installiert.Der Prototyp des Signalhandlers erfordert ein formalen Argument, sig, des Typs int.Das Betriebssystem stellt das tatsächliche Argument als sig bereit, wenn eine Unterbrechung auftritt; ist das Argument das Signal, das die Unterbrechung generierte.So können Sie die sechs Manifesten Konstanten (in der obigen Tabelle) innerhalb des Signalhandlers verwenden, um zu bestimmen, die aufgetreten unterbrechen und entsprechende Maßnahmen einleiten.Beispielsweise können Sie signal zweimal aufrufen, um den gleichen Handler an zwei verschiedenen Signalen zuzuweisen, dann testen das sig-Argument innerhalb des Handlers, um andere Aktionen auf Grundlage des empfangene Signal ausführen.

Wenn Sie für Gleitkommaausnahmen (SIGFPE) testen, zeigt func an eine Funktion, die ein optionales zweites Argument akzeptiert, die eine von mehreren Manifester Konstanten ist, die in FLOAT.H des Formulars FPE_xxx definiert werden.Wenn ein SIGFPE Signal auftritt, können Sie den Wert des zweiten Arguments testen, um den Typ der Gleitkommaausnahme zu bestimmen und dann die entsprechende Aktion ausführen.Dieses Argument und seine möglichen Werte sind Microsoft-Erweiterungen.

Für Gleitkommaausnahmen wird der Wert von func nicht nach Empfang des Signals zurückgesetzt.Um sich von Gleitkommaausnahmen zu beheben, verwenden Sie versuchen/außer die Klauseln, die die Gleitkommaoperationen eingeschlossen.Wiederherzustellen ist auch möglich, mit setjmp mit longjmp.In jedem Fall setzt der aufrufende Prozess Ausführung mit dem Gleitkommazustand von der linken Prozessnicht definierten fort.

Wenn der Signalhandler zurückgibt, wird der aufrufende Prozess Ausführung direkt nach dem Punkt ausgeführt, an dem sie das Unterbrechungssignal empfangen hat.Dies gilt unabhängig vom Typ des Signals oder des Betriebsmodus ausgeführt.

Bevor die angegebene Funktion ausgeführt wird, wird der Wert von func zu SIG_DFL festgelegt.Im folgenden Unterbrechungssignal behandelt wird, wie für SIG_DFL beschrieben, es sei denn, ein zwischenzeitlicher Aufruf signal nicht anders angegeben.Diese Funktion können Sie anschließend in der aufgerufenen Funktion zurücksetzen.

Da SignalHandlerroutinen normalerweise asynchron aufgerufen werden, wenn eine Unterbrechung auftritt, kann die SignalHandlerfunktion Steuerelement ab, wenn ein Ablaufvorgang und in einem unbekannten Zustand unvollständig ist.Die folgende Liste fasst Einschränkungen zusammen, die bestimmen, welche Funktionen Sie in der SignalHandlerroutine verwenden können.

  • Geben Sie nicht STDIO.H-E/A-Routinen oder die auf niedriger Ebene aus (z printf und fread).

  • Rufen Sie Heaproutinen oder keine Routine auf, die die Heaproutinen verwendet (z malloc, _strdup und _putenv).Siehe malloc weitere Informationen.

  • Verwenden Sie keine Funktion, die einen Systemaufruf generiert (z. _getcwd, time).

  • Verwenden Sie nicht longjmp, es sei denn, die Unterbrechung durch eine Gleitkommaausnahme verursacht wird (d. sig, ist SIGFPE).In diesem Fall initialisieren Sie zunächst das Gleitkommapaket mit einem Aufruf von _fpreset.

  • Verwenden Sie keine Overlayroutinen.

Ein Programm muss Gleitkommacode enthalten, wenn er, die SIGFPE Ausnahme mit der Funktion von ist.Wenn das Programm keine Gleitkommacode verfügt und den SignalBehandlungscode der Laufzeitbibliothek erfordert, deklarieren Sie einfach ein flüchtiges Double und initialisieren Sie es auf null:

volatile double d = 0.0f; 

Die SIGILL und SIGTERM signalisiert werden nicht unter Windows generiert.Sie werden für ANSI-Kompatibilität enthalten.So können Sie Signalhandler für diese Signalen mit signal festlegen, und Sie können diese Signale auch explizit generieren, indem Sie Erhöhen aufrufen.

Signaleinstellungen werden nicht in den generierten Prozessen beibehalten, die durch Aufrufe _exec oder zu _spawn-Funktionen erstellt werden.Die Signaleinstellungen werden dem Standard in neuen Prozess zurückgesetzt.

Anforderungen

Routine

Erforderlicher Header

signal

<signal.h>

So zusätzlicher Kompatibilitätsinformation finden Sie unter Kompatibilität in der Einführung.

Beispiel

Im folgenden Beispiel wird die Verwendung von signal an, ein benutzerdefiniertes Verhalten dem SIGABRT Signal hinzuzufügen.Weitere Informationen über Abbruchsverhalten finden Sie unter _set_abort_behavior.

// crt_signal.c
// compile with: /c
// Use signal to attach a signal handler to the abort routine
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <tchar.h>

void SignalHandler(int signal)
{
    printf("Application aborting...\n");
}

int main()
{
    typedef void (*SignalHandlerPointer)(int);

    SignalHandlerPointer previousHandler;
    previousHandler = signal(SIGABRT, SignalHandler);
    
    abort();
}
  
  
  

.NET Framework-Entsprechung

Nicht zutreffend. Um die Standard-C-Funktion aufzurufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Prozess- und Umgebungssteuerelement

Abbruch

_exec, _wexec Funktionen

Beenden, _exit

_fpreset

_spawn, _wspawn Funktionen