Avatar
omochimetaru 1/16/2018 2:10 AM
シグナルハンドラって関数として登録するんですけど、CPU命令のタイミングでフックされて呼び出されるわけで
2:10 AM
そこで死なずに戻ってきたとして
2:10 AM
例えばそのシグナルが発生してる例としては
2:10 AM
var x: String? = nil var y: String = x!
2:11 AM
↑こういうコードがあったとして、2行目の右辺値の評価中に ! のところで x がnilだからシグナルで死ぬわけです
2:11 AM
てことは、ハンドラで蘇生して戻ってきたとしても
2:13 AM
nilのメモリ(おそらくここでは0で埋まった24バイトの連続メモリ)
2:13 AM
を、Stringとみなして無理やり読み取って続きの処理が走ろうとするんで
2:14 AM
内部バッファを指すポインタも0になってるから、 文字を読み取ろうとした時点で今度はnullポインタによるメモリアクセス違反のシグナルが飛んでくるとか
2:14 AM
そういう感じになると思います
2:14 AM
あ〜、シグナルハンドラの時点でスレッドを殺しちゃえば