sqlsignal() 函数启用或禁用 GBase 8s ESQL/C 库处理的信号的信号处理。
语法
void sqlsignal(sigvalue, sigfunc_ptr, mode)
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 948 -
mint sigvalue;
void (*sigfunc_ptr) (void);
int mode;
sigvalue
需要捕获的特定的信号的 mint 值(如 signal.h) 定义的那样)。
当前,此参数是未来设计功能的占位符。请将此参数初始化为 -1。
sigfunc_ptr
指向用户定义的函数的指针,其不带参数,来为 sigvalue 信号作为信号句柄调用。
当前,此参数是未来设计功能的占位符。请将此参数初始化为指向不接收参数的函数
的空指针。
mode
可为三种可能的模式之一:
0
初始化信号处理。
1
禁用信号处理。
2
重新启用信号处理。
用法
sqlsignal() 函数当前仅为 SIGCHLD 信号提供处理。在有些情况下,在应用程序结束
之后,defunct 子进程保持。如果应用程序不清理这些进程,则它们导致进程 ID 不必要的
使用,并增加您用尽进程的风险。对于客户机-服务器通讯,当应用程序使用管道时(即,
sqlhosts 文件的 nettype 字段为 ipcpip),此行为才显而易见。对于其他通讯机制,你无
需调用 sqlsignal()(例如, tlipcp 的 nettype)。
sqlsignal() 的 mode 参数确定 sqlsignal() 执行的任务,如下:
设置 mode 为 0 来初始化信号处理。
sqlsignal(-1, (void (*)(void))0, 0);
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 949 -
当您以 sqlsignal() 来初始化信号处理时,GBase 8s ESQL/C 库捕获 SIGCHLD 信号
来处理 defunct 子进程的清除。
此初始的 sqlsignal() 调用必须发生在您的应用程序的开头,
在程序中的第一个 SQL 语句之前。如果您省略此初始的调用,则在您的程序中,稍后不
可开启信号处理能力。
启用或禁用信号处理。
如果您想要让 GBase 8s ESQL/C 库为程序的部分执行信息处理,且您自己的代码为
其他部分执行信号处理,则您可采取下列行动:
要禁用信号处理,
请以设置为 1 的 mode 调用 sqlsignal(),
在您想要您的程序处理信
号的点处:
sqlsignal(-1, (void (*)(void))0, 1);
要重新启用信号处理,
请以设置为 2 的 mode 来调用 sqlsignal(),
在您想要 GBase 8s
ESQL 库处理信号的点处:
sqlsignal(-1, (void (*)(void))0, 2);
当您以 sqlsignal() 初始化 SIGCHLD 信号处理时,您允许 GBase 8s ESQL/C 库处理
SIGCHLD 清除。否则,如果 defunct 子进程是个问题,则您的应用程序必须执行对这些
进程的清理。