max*_*zig 10 c oracle signals oracle-call-interface oracle-pro-c
当使用Pro*C(Oracle for C-Code的嵌入式SQL预处理器)或OCI时,我注意到connect/init例程安装了一些信号处理程序.
这意味着在之前
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbspec ;
Run Code Online (Sandbox Code Playgroud)
或者a
OCIEnvNlsCreate()
Run Code Online (Sandbox Code Playgroud)
我可以验证,例如这些信号有以下处理程序:
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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
其中0x7eff9e60bdac表示sslsshandler(),0x7eff9ea17f9c表示- 在Oracle运行时库中skgesig_sigactionHandler()定义的两个符号libclntsh.so.11.1.
我担心那些Oracle信号处理程序,因为它们似乎引入了一些非确定性的行为.这意味着取决于操作系统,硬件和段错误/中止的类型,我观察到以下行为:
特别是最后的行为是怪诞的.
因此,我感兴趣的是:
act.sa_handler = SIG_DFL; sigaction(SIGABRT, &act, 0);?小智 9
信号处理和诊断框架注意事项:OCI诊断框架安装可能影响您在应用程序中使用的任何信号处理的信号处理程序.您可以通过设置禁用OCI信号处理
DIAG_SIGHANDLER_ENABLED=FALSE
Run Code Online (Sandbox Code Playgroud)
在sqlnet.ora文件中.有关信息,请参阅" Oracle调用接口程序员指南 "中的" OCI中的故障可诊断性 " .
请尝试在sqlnet.ora文件中配置此环境变量