Это зафиксировало его для меня
http://www.sqlnewsgroups.net/group/microsoft.public.sqlserver.server/topic23830.aspx
По существу:-
Удалите следующие подразделы реестра, которые хранят настройки SID:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Server\MSSQL.X\Setup\SQLGroup HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\Setup\AGTGroup HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\Setup\FTSGroup HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL SQL Server\MSSQL.X\Setup\ASGroup
Это возможно для приложения или проигнорировать или сделать некоторую специальную обработку для сигнала неисправности сегментации. Страница руководства для сигнала и связанных страниц имеет детали о нем.
Одна возможная ситуация, которую я вижу, могла привести к описанному поведению (dmesg, сообщает segfaults, но приложение работает), то, что ветвления приложения и дочерний процесс segfaults. Для знания, если это верно, проверьте, совпадает ли идентификатор процесса, о котором сообщает dmesg, с тем в настоящее время рабочего процесса.
Программы, которые работают в фоновом режиме, могут хорошо использовать обработку SIGSEGV, если только зарегистрировать то, что она зашла по дороге с контекстом до выхода. Это дает не только признак того, что пошло не так, как надо в файле журнала, но также и полезной информации для включения в отчет об ошибках. Да, сигнал может быть проигнорирован, но это только посредством намеренной акции и является почти всегда плохой идеей (если Вы не тестируете под экспериментальным ядром с известным багги vmm подсистему).
К сожалению, после того как тот сигнал пойман, ЧТО-ЛИБО - подозреваемый. Например, использование чего-либо, что выделяет память в обработчике SEGV, вероятно плохая идея. То же идет для функций variadic как printf (). Таким образом да, в то время как приложение обрабатывает сигнал, оно не может делать так эффективно, следовательно Вы только видите трассировки его в dmesg.
Так или иначе, да, сигнал отправляется в приложение, однако SEGV не является оперативным сигналом и может быть объединен ядром. Т.е. если память доступов программы, к которой это не имеет никаких прав получить доступ 15 раз, существует очень хороший шанс, что только один SEGV будет на самом деле поставлен, в зависимости от синхронизации недопустимого доступа к памяти.
В обработчиках SEGV открытых (), запись () и близко () является Вашими друзьями и использует специальный журнал отладки (т.е. не регистрирующийся поток ФАЙЛА, который, возможно, был открыт ранее).
SIGSEGV автоматически отправляется ядром, если процесс делает что-то с памятью, это не должно было делать; но сигнал может быть захвачен, и процесс может выполнить обработчик сигналов, который может попытаться восстановиться с состояния отказа. В этом случае процесс может продолжать бежать.
Сигнал может также быть полностью проигнорирован, но это - что-то, чего нужно избежать; получение SIGSEGV обычно означает, что существует что-то действительно, действительно неправильно продолжаясь.
Отказ сегментации обычно означает, что что-то пошло очень неправильно с внутренним состоянием приложения. Это может быть именно так повреждено, что это не может выполнить обработчик сигналов – обработчик сигналов, который, как предполагается, печатает дамп стека, мог отказать также.
Править: Я не сделал вполне понятого 'времени работы более старая' часть, таким образом, я пропустил ее. Поскольку теперь я вижу, что Ваш вопрос был, 'почему приложение все еще работает', таким образом, вот новый ответ:
Да, приложение может пережить SIGSEGV. Иногда SIGSEGV будет отправлен только в некоторый менее важный поток (он должен уничтожить целое приложение, но иногда он не делает), или даже просто дочерний процесс – что Вы видите, поскольку одно приложение может быть несколькими процессами или потоками.