次の方法で共有


abort

現在のプロセスを中止し、エラー コードを返します。

Note

テストまたはデバッグ シナリオの場合を除き、この方法を使用して Microsoft Store アプリまたはユニバーサル Windows プラットフォーム (UWP) アプリをシャットダウンしないでください。 プログラムまたは UI を使用して Store アプリを閉じる方法は、Microsoft Store ポリシーでは許可されていません。 詳細については、UWP アプリのライフサイクルに関するページを参照してください。

構文

void abort( void );

戻り値

abort は、呼び出し元のプロセスに制御を返しません。 既定では、中止シグナル ハンドラーが確認され、それが設定されている場合は SIGABRT が発生します。 その後 abort は、現在のプロセスを終了し、親プロセスに終了コードを返します。

解説

Microsoft 固有の仕様

既定では、デバッグ ランタイム ライブラリを使用してアプリをビルドしている場合、abort ルーチンによってエラー メッセージが表示された後、SIGABRT が発生します。 コンソール モードで動作しているコンソール アプリの場合は、STDERR にメッセージが送信されます。 ウィンドウ モードで動作している Windows デスクトップ アプリとコンソール アプリでは、メッセージ ボックスにメッセージが表示されます。 メッセージを非表示にするには、_set_abort_behavior を使用して _WRITE_ABORT_MSG フラグをクリアします。 表示されるメッセージは、使用しているランタイム環境のバージョンによって異なります。 Visual C++ の最新バージョンを使用してビルドされたアプリケーションの場合、メッセージは次のようになります。

R6010 - abort() が呼び出されました

C ランタイム ライブラリの以前のバージョンでは、次のメッセージが表示されました。

このアプリケーションは、通常と異なる方法でランタイムにアプリケーションを中止するように要求しました。 詳細については、アプリケーションのサポート チームに問い合わせてください。

プログラムをデバッグ モードでコンパイルしている場合、メッセージ ボックスに [中止]、[再試行]、または [無視] のオプションが表示されます。 ユーザーが [中止] をクリックすると、プログラムが即座に終了し、終了コード 3 が返されます。 ユーザーが [再試行] をクリックすると、just-in-time デバッグが有効な場合はデバッガーが起動してデバッグが開始します。 ユーザーが [無視] をクリックすると、abort によって通常の処理が続けられます。

リテール ビルドとデバッグ ビルドのどちらの場合も、abort は次に、中止シグナル ハンドラーが設定されているかどうかを確認します。 既定以外のシグナル ハンドラーが設定されている場合、abortraise(SIGABRT) を呼び出します。 SIGABRT シグナルに中止シグナル ハンドラー関数を関連付けるには、signal 関数を使用します。 ハンドラー関数では、カスタム動作 (リソースのクリーンアップや情報のログ記録など) を実行し、独自のエラー コードを発行してアプリを修了できます。 カスタムシグナルハンドラが定義されていない場合、 abortSIGABRT シグナルを発生させません。

デスクトップまたはコンソール アプリの非デバッグ ビルドの既定では、abort によって Windows エラー報告サービス メカニズム (旧称は dr. Watson) を呼び出して、エラーを Microsoft に報告します。 この動作は、_set_abort_behavior を呼び出し、_CALL_REPORTFAULT フラグを設定するかマスクして、有効または無効にすることができます。 フラグが設定されている場合、"問題が発生したため、プログラムが正常に動作しなくなりました。" などのテキストを含むメッセージ ボックスが Windows に表示されます。ユーザーは、[デバッグ] ボタンを使用してデバッガーを起動するか、[プログラムの終了] ボタンを選択して、オペレーティング システムで定義されているエラー コードを使用してアプリを終了するかを選択できます。

Windows エラー報告ハンドラーが呼び出されていない場合、 abort_exit を呼び出して終了コード 3 でプロセスを終了し、親プロセスまたはオペレーティング システムに制御を返します。 _exit はストリーム バッファーをフラッシュしたり、 atexit/_onexit 処理を行ったりしません。

Windows の互換性上の理由から、 abort 呼び出し _exit、Windows ExitProcess API を呼び出すことができます。これにより、DLL 終了ルーチンを実行できるようになります。 デストラクターは実行可能ファイルで実行されませんが、実行可能ファイルのプロセス空間に読み込まれた DLL でも同じではない可能性があります。 この動作は、C++ 標準に厳密に準拠していません。 DLL を含むプロセスを直ちに終了するには、Windows TerminateProcess API を使用します。 標準準拠の動作に対して TerminateProcess を呼び出す中止シグナル ハンドラーを登録することもできます。 準拠している動作は、Windows の互換性に多少のコストがかかる場合があります。

CRT デバッグの詳細については、「 CRT デバッグ手法を参照してください。

End Microsoft Specific

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 これを変更するには、「CRT でのグローバル状態」を参照してください。

要件

ルーチンによって返される値 必須ヘッダー
abort <process.h> または <stdlib.h>

次のプログラムはファイルを開こうとしますが、試みに失敗すると中止されます。

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

関連項目

abort の使用
abort 関数
プロセスと環境の制御
_exec_wexec 関数
exit_Exit_exit
raise
signal
_spawn_wspawn 関数
_DEBUG
_set_abort_behavior