Это потому, что после выполнения вашего обработчика сигнала EIP возвращается к инструкции, которая вызывает SIGSEGV - поэтому он выполняется снова, и SIGSEGV снова вызывается.
Обычно игнорирование SIGSEGV, как вы делаете, в любом случае бессмысленно - предположим, что инструкция действительно читает какое-то значение из указателя на регистр, что бы вы сделали? У вас нет «правильного» значения для ввода в регистр, поэтому следующий код, скорее всего, снова будет SIGSEGV или, что еще хуже, вызовет некоторую логическую ошибку.
Вы должны либо выйти из процесса, когда происходит SIGSEGV, либо вернуться к известной безопасной точке - longjmp должен работать, , если , вы знаете, что это действительно безопасная точка (единственный возможный пример, который приходит на ум это интерпретаторы VM / JIT).