2

Linux でマルチスレッド アプリケーションを実行しています。SIGSEGV などのクラッシュが発生すると、ハンドラーが呼び出されます。ハンドラーが実行されているとき、プロセス内の他のスレッドの状態はどうなりますか? スレッドは引き続き実行されますか?

4

1 に答える 1

3

SIGSEGV信号は同期信号です。無効なメモリ アクセスの原因となったスレッド (プロセス全体ではなく、そのスレッドのみ) に配信されます。

詳細はこちらをご覧ください。リンクされたドキュメントからの抜粋を次に示します。

シグナルは、プロセス全体 (たとえば、kill(2) を使用して送信される場合) または特定のスレッド(たとえば、実行の結果として生成されるSIGSEGVや SIGFPEなどの特定のシグナル) に対して生成される (したがって保留中) 場合があります。特定の機械語命令は、pthread_kill(3) を使用して特定のスレッドを対象とするシグナルと同様に、スレッド向けです)。プロセス向けシグナルは、現在シグナルがブロックされていないスレッドのいずれかに配信される可能性があります。複数のスレッドでシグナルのブロックが解除されている場合、カーネルはシグナルを配信する任意のスレッドを選択します。

于 2013-03-19T16:05:39.560 に答える