Oracle Pro * C / OCI устанавливает обработчики для SIGSEGV / SIGABRT и друзей - почему и как отключить?

При использовании Pro * C (встроенного препроцессора SQL от Oracle для C-Code) или OCI я заметил, что процедура connect / init устанавливает некоторые обработчики сигналов.

Это означает, что перед

EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbspec ;

или

OCIEnvNlsCreate()

Я могу убедиться, что, например, эти сигналы имеют следующие обработчики:

No              NAME                Pointer   SA_SIGINFO   SIG_DFL   SIG_IGN
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
 1            SIGHUP                  (nil)        false      true     false
 2            SIGINT                  (nil)        false      true     false
 3           SIGQUIT                  (nil)        false      true     false
 4            SIGILL                  (nil)        false      true     false
 5           SIGTRAP                  (nil)        false      true     false
 6           SIGABRT                  (nil)        false      true     false
 7            SIGBUS                  (nil)        false      true     false
 8            SIGFPE                  (nil)        false      true     false
 9           SIGKILL                  (nil)        false      true     false
10           SIGUSR1                  (nil)        false      true     false
11           SIGSEGV                  (nil)        false      true     false
12           SIGUSR2                  (nil)        false      true     false
13           SIGPIPE                  (nil)        false      true     false
14           SIGALRM                  (nil)        false      true     false

После оператора connect / init таблица выглядит так:

No              NAME                Pointer   SA_SIGINFO   SIG_DFL   SIG_IGN
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
 1            SIGHUP                  (nil)        false      true     false
 2            SIGINT         0x7eff9e60bdac         true     false     false
 3           SIGQUIT         0x7eff9ea17f9c         true     false     false
 4            SIGILL         0x7eff9ea17f9c         true     false     false
 5           SIGTRAP         0x7eff9ea17f9c         true     false     false
 6           SIGABRT         0x7eff9ea17f9c         true     false     false
 7            SIGBUS         0x7eff9ea17f9c         true     false     false
 8            SIGFPE         0x7eff9ea17f9c         true     false     false
 9           SIGKILL                  (nil)        false      true     false
10           SIGUSR1                  (nil)        false      true     false
11           SIGSEGV         0x7eff9ea17f9c         true     false     false
12           SIGUSR2                  (nil)        false      true     false
13           SIGPIPE                    0x1         true     false      true
14           SIGALRM                  (nil)        false      true     false

где 0x7eff9e60bdac обозначаетsslsshandler() и 0x7eff9ea17f9c обозначаетskgesig_sigactionHandler() - оба символа определены вlibclntsh.so.11.1 - библиотека времени выполнения Oracle.

Я обеспокоен этими обработчиками сигналов Oracle, потому что кажется, что они вводят некоторое недетерминированное поведение. Это означает, что в зависимости от операционной системы, аппаратного обеспечения и вида сбоя / прерывания я наблюдал следующее поведение:

ужасная трассировка стека, которая не содержит много полезной информациипрямой выход из программы с exit-status 1 - без записи файла ядра и сообщения об ошибкепрямой выход из программы со статусом выхода 0 (sic!)

Особенно последнее поведение гротескно.

Таким образом, я заинтересован в:

мотивация - почему эти обработчики сигналов установлены Oracle?как их отключить? - по крайней мере для сигналов, которые дают основной файл по умолчанию - потому что для моего варианта использования я хочу ядро в этих обстоятельствах (во время разработки) или для надежного и информативного состояния выхода в производствебезопасно ли переписывать обработчик сигналов Oracle, например, черезact.sa_handler = SIG_DFL; sigaction(SIGABRT, &act, 0); ?Каковы недостатки сброса SIGABRT / SIGSEGV и друзей в SIG_DFL после подключения?

Ответы на вопрос(2)

Ваш ответ на вопрос