abort
Interrompe il processo corrente e restituisce un codice di errore.
Nota
Non usare questo metodo per arrestare un'app di Microsoft Store o piattaforma UWP (Universal Windows Platform) (UWP), ad eccezione di scenari di test o debug. I modi programmatici o dell'interfaccia utente per chiudere un'app dello Store non sono consentiti in base ai criteri di Microsoft Store. Per altre informazioni, vedi Ciclo di vita delle app UWP.
Sintassi
void abort( void );
Valore restituito
abort
non restituisce il controllo al processo chiamante. Per impostazione predefinita, cerca un gestore di segnale di interruzione e genera SIGABRT
se ne è stato impostato uno. Quindi abort
termina il processo corrente e restituisce un codice di uscita al processo padre.
Osservazioni:
Sezione specifica Microsoft
Per impostazione predefinita, quando un'app viene compilata con la libreria di runtime di debug, la routine abort
visualizza un messaggio di errore prima che venga generato SIGABRT
. Per le app della console eseguite in modalità console, il messaggio viene inviato a STDERR
. Le app desktop e le app console di Windows eseguite in modalità finestra visualizzano il messaggio in una finestra di messaggio. Per eliminare il messaggio, usare _set_abort_behavior
per cancellare il _WRITE_ABORT_MSG
flag. Il messaggio visualizzato varia a seconda della versione dell'ambiente di runtime usato. Per le applicazioni compilate usando le versioni più recenti di Visual C++, il messaggio è simile al seguente:
R6010 - abort() è stato chiamato
Nelle versioni precedenti della libreria di runtime C, veniva visualizzato il messaggio seguente:
Questa applicazione ha richiesto al Runtime di terminarlo in modo anomalo. Per altre informazioni, contattare il team di supporto dell'applicazione.
Quando il programma viene compilato in modalità debug, la finestra di messaggio visualizza le opzioni Interrompi, Riprova o Ignora. Se l'utente sceglie Interrompi, il programma viene immediatamente terminato e viene restituito un codice di uscita 3. Se l'utente sceglie Riprova, viene richiamato un debugger per il debug JIT, se disponibile. Se l'utente sceglie Ignora, abort
continua l'elaborazione normale.
Nelle build di distribuzione e di debug, abort
verifica quindi se è stato impostato un gestore di segnale di interruzione. Se è impostato un gestore di segnale non predefinito, abort
chiama raise(SIGABRT)
. Usare la signal
funzione per associare una funzione del gestore del segnale di interruzione al SIGABRT
segnale. È possibile eseguire azioni personalizzate, ad esempio pulire le risorse o le informazioni di registro, e terminare l'app con il proprio codice di errore nella funzione del gestore. Se non è definito alcun gestore di segnale personalizzato, abort
non genera il SIGABRT
segnale.
Per impostazione predefinita, nelle build non di debug delle app desktop o console, abort
richiama il meccanismo del servizio Segnalazione errori Windows (in precedenza noto come Dr. Watson) per segnalare gli errori a Microsoft. Questo comportamento può essere abilitato o disabilitato chiamando _set_abort_behavior
e impostando o eseguendo il mascheramento del flag _CALL_REPORTFAULT
. Quando il flag è impostato, Windows visualizza una finestra di messaggio con testo simile a "Un problema ha causato il corretto funzionamento del programma". L'utente può scegliere di richiamare un debugger con un pulsante Debug oppure scegliere il pulsante Chiudi programma per terminare l'app con un codice di errore definito dal sistema operativo.
Se il gestore segnalazione errori Windows non viene richiamato, abort
chiama _exit
per terminare il processo con codice di uscita 3 e restituisce il controllo al processo padre o al sistema operativo. _exit
non scarica i buffer di flusso o esegue atexit
/_onexit
l'elaborazione.
Per motivi di compatibilità di Windows, quando abort
chiama _exit
, può richiamare l'API Windows ExitProcess
, che a sua volta consente l'esecuzione di routine di terminazione DLL. I distruttori non vengono eseguiti nel file eseguibile, ma lo stesso potrebbe non essere vero delle DLL caricate nello spazio di elaborazione dell'eseguibile. Questo comportamento non è strettamente conforme allo standard C++. Per terminare immediatamente un processo che include tutte le DLL, usare l'API di Windows TerminateProcess
. È anche possibile registrare un gestore del segnale di interruzione che richiama per il TerminateProcess
comportamento conforme allo standard. Il comportamento conforme può comportare un certo costo per la compatibilità di Windows.
Per altre informazioni sul debug CRT, vedere Tecniche di debug CRT.
End Microsoft Specific
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificarlo, vedere Stato globale in CRT.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
abort |
<process.h> oppure <stdlib.h> |
Esempio
Il programma seguente tenta di aprire un file e viene interrotto se il tentativo non riesce.
// crt_abort.c
// compile with: /TC
// This program demonstrates the use of
// the abort function by attempting to open a file
// and aborts if the attempt fails.
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
FILE *stream = NULL;
errno_t err = 0;
err = fopen_s(&stream, "NOSUCHF.ILE", "r" );
if ((err != 0) || (stream == NULL))
{
perror( "File could not be opened" );
abort();
}
else
{
fclose( stream );
}
}
File could not be opened: No such file or directory
Vedi anche
Utilizzando abort
Funzione abort
Processo e controllo dell'ambiente
_exec
, _wexec
funzioni
exit
, _Exit
, _exit
raise
signal
_spawn
, _wspawn
funzioni
_DEBUG
_set_abort_behavior