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