abort

Membatalkan proses saat ini dan mengembalikan kode kesalahan.

Catatan

Jangan gunakan metode ini untuk mematikan aplikasi Microsoft Store atau aplikasi Platform Windows Universal (UWP), kecuali dalam skenario pengujian atau penelusuran kesalahan. Cara terprogram atau UI untuk menutup aplikasi Store tidak diizinkan sesuai dengan kebijakan Microsoft Store. Untuk informasi selengkapnya, lihat Siklus hidup aplikasi UWP.

Sintaks

void abort( void );

Nilai hasil

abort tidak mengembalikan kontrol ke proses panggilan. Secara default, ini memeriksa handler sinyal pembatalan dan menaikkan SIGABRT apakah ada yang diatur. Kemudian abort mengakhiri proses saat ini dan mengembalikan kode keluar ke proses induk.

Keterangan

Khusus Microsoft

Secara default, saat aplikasi dibangun dengan pustaka runtime debug, abort rutinitas menampilkan pesan kesalahan sebelum SIGABRT dinaikkan. Untuk aplikasi konsol yang berjalan dalam mode konsol, pesan dikirim ke STDERR. Aplikasi desktop Windows dan aplikasi konsol yang berjalan dalam mode berjendela menampilkan pesan dalam kotak pesan. Untuk menyembunyikan pesan, gunakan _set_abort_behavior untuk menghapus _WRITE_ABORT_MSG bendera. Pesan yang ditampilkan tergantung pada versi lingkungan runtime yang digunakan. Untuk aplikasi yang dibangun dengan menggunakan versi Terbaru Visual C++, pesan menyerupi yang satu ini:

R6010 - abort() telah dipanggil

Di versi pustaka runtime C sebelumnya, pesan ini ditampilkan:

Aplikasi ini telah meminta Runtime untuk mengakhirinya dengan cara yang tidak biasa. Silakan hubungi tim dukungan aplikasi untuk informasi lebih lanjut.

Saat program dikompilasi dalam mode debug, kotak pesan menampilkan opsi untuk Batalkan, Coba Lagi, atau Abaikan. Jika pengguna memilih Batalkan, program segera berakhir dan mengembalikan kode keluar 3. Jika pengguna memilih Coba Lagi, debugger dipanggil untuk penelusuran kesalahan just-in-time, jika tersedia. Jika pengguna memilih Abaikan, abort lanjutkan pemrosesan normal.

Dalam build ritel dan debug, abort kemudian memeriksa apakah handler sinyal pembatalan diatur. Jika handler sinyal non-default diatur, abort panggil raise(SIGABRT). signal Gunakan fungsi untuk mengaitkan fungsi handler sinyal batal dengan SIGABRT sinyal. Anda dapat melakukan tindakan kustom—misalnya, membersihkan sumber daya atau informasi log—dan mengakhiri aplikasi dengan kode kesalahan Anda sendiri di fungsi handler. Jika tidak ada handler sinyal kustom yang didefinisikan, abort tidak menaikkan SIGABRT sinyal.

Secara default, dalam build non-debug aplikasi desktop atau konsol, abort lalu memanggil mekanisme layanan Pelaporan Galat Windows (sebelumnya dikenal sebagai Dr. Watson) untuk melaporkan kegagalan ke Microsoft. Perilaku ini dapat diaktifkan atau dinonaktifkan dengan memanggil dan mengatur _set_abort_behavior atau menutupi _CALL_REPORTFAULT bendera. Ketika bendera diatur, Windows menampilkan kotak pesan yang memiliki teks seperti "Masalah menyebabkan program berhenti bekerja dengan benar." Pengguna dapat memilih untuk memanggil debugger dengan tombol Debug , atau memilih tombol Tutup program untuk mengakhiri aplikasi dengan kode kesalahan yang ditentukan oleh sistem operasi.

Jika handler pelaporan kesalahan Windows tidak dipanggil, maka abort panggilan _exit untuk mengakhiri proses dengan kode keluar 3 dan mengembalikan kontrol ke proses induk atau sistem operasi. _exit tidak membersihkan buffer aliran atau melakukan atexit/_onexit pemrosesan.

Untuk alasan kompatibilitas Windows, ketika abort panggilan _exit, itu dapat memanggil WINDOWS ExitProcess API, yang pada gilirannya memungkinkan rutinitas penghentian DLL berjalan. Destructor tidak dijalankan dalam executable, tetapi hal yang sama mungkin tidak benar dari DLL yang dimuat dalam ruang proses yang dapat dieksekusi. Perilaku ini tidak sepenuhnya sesuai dengan standar C++. Untuk segera mengakhiri proses termasuk DLL apa pun, gunakan WINDOWS TerminateProcess API. Anda juga dapat mendaftarkan handler sinyal pembatalan yang memanggil TerminateProcess perilaku yang mematuhi standar. Perilaku yang sesuai mungkin dikenakan biaya dalam kompatibilitas Windows.

Untuk informasi selengkapnya tentang penelusuran kesalahan CRT, lihat teknik penelusuran kesalahan CRT.

Akhiri Microsoft Spesifik

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubahnya, lihat Status global di CRT.

Persyaratan

Rutin Header yang diperlukan
abort <process.h> atau <stdlib.h>

Contoh

Program berikut mencoba membuka file dan membatalkan jika upaya gagal.

// 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

Baca juga

Menggunakan abort
abort fungsi
Kontrol proses dan lingkungan
_exec, _wexec fungsi
exit, _Exit, _exit
raise
signal
_spawn, _wspawn fungsi
_DEBUG
_set_abort_behavior