1

cppのドキュメントには、次のように記載されています。

子プロセスが終了する原因となったシグナルを発生させたために、子プロセスが終了したかどうかを判別します

WIFSIGNALED機能について。どのような状況がプロセスにそのようなことをさせるのでしょうか?

4

2 に答える 2

2

アサーションを使用してプログラムが正しいことを確認すると、失敗assertするとプロセスが終了するシグナル SIGABRT が生成されます。これは、プログラムが自分自身にシグナルを送る意図的なケースです。

シグナルの偶発的な原因には、(整数)ゼロ除算(SIGFPE、おかしなことに)、メモリアクセスのミスアライン(SIGBUS;奇数アドレスを使用して、偶数アドレス境界にアラインする必要があるタイプにアクセスする場合に発生しますが、すべてのシステムがそれにうるさいわけではありません)、または無効なメモリアドレスにアクセスしています(SIGSEGV)。

于 2013-03-13T04:29:04.430 に答える
1

これを引き起こす可能性のあるシグナルは多数あります。さらに、プロセスが終了する方法はさまざまです (つまり、コア ダンプを使用するなど)。プロセスが受信できるシグナルの表と、それらの各シグナルのデフォルトの配置を確認するには、シグナルのマニュアル ページ、特に標準シグナルのセクションを参照ください。可能な配置のリストについては、上部にあるシグナルの配置セクションを確認してください。

これは RTFM 応答という意味ではありません。そのマニュアルページには、プロセスを終了できるシグナルの種類についてのきちんとした簡潔な表が実際に示されています。

たとえば、次のようなものがあります。

SIGFPE - 8 - コア - 浮動小数点例外

ゼロ除算などの浮動小数点例外が発生した場合にプロセスに送信されます。これにより、プロセスがコア ダンプで終了します。

于 2013-03-13T01:55:54.307 に答える