#include <cstdlib>
#include <iostream>
int main()
{
const int result = system("./core_dump"); // core_dump only calls abort()
std::cout << "result=" << result << '\n';
std::cout << "Terminated by signal: " << (WIFSIGNALED(result) ? "yes" : "no") << '\n';
std::cout << "Exited normally: " << (WIFEXITED(result) ? "yes" : "no") << '\n';
return 0;
}
出力 (Ubuntu 12.10 の場合):
Aborted (core dumped)
result=34304
Terminated by signal: no
Exited normally: yes
./core_dumpが出力されるのは驚くべきことかもしれませんexited normally: yes。./core_dump失敗しましたが、正常に終了したコマンドを実行しているプロセスsystemの終了コードを返します。/bin/sh -c
対照的に、system("/bin/kill -9 $$")代わりに呼び出すとsystem("./core_dump")、次の出力が得られます。
result=9
Terminated by signal: yes
Exited normally: no
終了コードに関するもう 1 つのメモ。このcore_dump例では、終了コード 34304 が返されました。まず、8 ビット分シフトする必要があります。結果は35304 >> 8 == 134、abort シグナルで強制終了されたジョブの終了コードです。segfault が原因で失敗した場合は、代わりに 139 が返されます。
終了コードの概要へのリンクを次に示します。
最後に、core_dumpテストに使用する のソース コードを次に示します。
#include <cstdlib>
int main() {
abort();
return 0;
}