abort -
プロセスの異常終了を生じさせる
#include <stdlib.h>
void abort(void);
abort() 関数は、まず
SIGABRT
の禁止 (block)
を解除してから、 (
raise(3)
が呼び出されたかのように)
呼び出し元のプロセスに
SIGABRT
シグナルを上げる。その結果、
SIGABRT シグナルが捕捉
(caught)
されていて、対応するシグナルハンドラーが返って来ない場合
(
longjmp(3) 参照)
以外は、プログラムの異常終了が起こる。
SIGABRT
シグナルが無視されている場合や返って来るシグナルハンドラーで捕捉されている場合であっても、
abort()
関数はそのプロセスを終了する。
SIGABRT
シグナルに対する処理方法をデフォルトに戻してから、再度
SIGABRT
シグナルを上げることで、このような動作になる。
abort()
関数が返ることはない。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
abort() |
Thread safety |
MT-Safe |
SVr4, POSIX.1-2001, POSIX.1-2008, 4.3BSD, C89, C99.
glibc 2.26 以前は、
abort()
関数によってプロセスの終了が引き起こされたときには、すべての開いているストリームは
(
close(3) で)
閉じられフラッシュされる。しかしながら、この動作はデッドロックやデータ破壊につながる場合がある。そのため、
glibc 2.27 以降では、
abort()
はストリームをフラッシュせずにプロセスを終了する。
POSIX.1-2001
ではどちらの動作も認めており、「
abort()
にはすべてのオープンされたストリームに対して
fclose()
を行おうとする処理が含まれていてもよい」
("
abort() may include an attempt to effect fclose() on all open
streams")
と書かれている。
gdb(1),
sigaction(2),
assert(3),
exit(3),
longjmp(3),
raise(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。