ABORT(3) | Linux Programmer's Manual | ABORT(3) |
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/ に書かれている。
2020-06-09 | GNU |