sigset , sighold , sigrelse 或 sigignore 子例程

用途

增强信号设施并提供信号管理。

标准 C 库 (libc.a)

语法

#include <signal.h>
void (*sigset( Signal,  Function))()
int Signal;
void (*Function)();
int sighold ( Signal)
int Signal;
int sigrelse ( Signal)
int Signal;
int sigignore ( Signal)
int Signal;

描述

sigsetsigholdsigrelsesigignore 子例程增强了信号设施,并为应用程序进程提供信号管理。

sigset 子例程指定接收 Signal 参数时要执行的系统信号操作。

sighldsigrelse 子例程建立关键的代码区域。 对 sighold 子例程的调用类似于提高优先级,延迟或保持信号,直到优先级被 sigrelse降低。 sigrelse 子例程将系统信号操作恢复到先前由 sigset 结构指定的操作。

sigignore 子例程将 Signal 参数的操作设置为 SIG_IGN

其他信号管理例程 signal不应与这些例程一起用于特定信号类型。

参数

描述
Signal 指定信号。 可以为 Signal 参数指定下列任何一个信号:
SIGHUP
挂断
SIGINT
中断
SIGQUIT
退出 *
西吉尔
非法指令 (捕获时未重置) *
SIGTRAP
跟踪陷阱 (捕获时未重置) *
SIGABRT
中止 *
SIGFPE
浮点异常 * 或算术异常,整数除以 0
SIGSYS
例程 * 的自变量不正确
SIGPIPE
写在没有人读的管道上
SIGALRM
警报时钟
SIGTERM
软件终止信号
SIGUSR1
用户定义的信号 1
SIGUSR2
用户定义的信号 2。

* 这些信号的缺省操作是异常终止。

对于可移植性,应用程序应仅使用或捕获上面列出的信号。 其他信号是依赖于硬件的信号和依赖于实现的信号,并且可能在系统中具有非常不同的含义或结果。 例如, System V 信号 (SIGEMTSIGBUSSIGSEGV SIGIOT) 与实现相关,并且未在上面列出。 特定实现可能具有其他与实现相关的信号。

描述
FUNCTION 指定选项。 Function 参数声明为返回 void 的函数的类型指针。 为 Function 参数分配了以下四个值之一: SIG_DFLSIG_IGNSIG_HOLD, 或信号捕获函数的 地址 。 每个值所执行的操作的定义如下:
SIG_DFL
在收到信号时终止处理。

接收到 Signal 参数指定的信号后,将终止接收进程,并产生 _exit 子例程中概述的所有后果。 此外,如果 信号 是上面标有星号的信号之一,那么可以调用依赖于实现的异常进程终止例程,例如核心转储。

SIG_IGN
忽略信号。

废弃由 Signal 参数指定的任何暂挂信号。 暂挂信号是已发生但未采取任何操作的信号。 系统信号操作设置为忽略将来出现的此信号类型。

SIG_HOLD
保持信号。

将挂起由 Signal 参数指定的信号。 此类型的任何暂挂信号仍保留。 每个类型仅保留一个信号。

地址 捕获信号。

接收到由 Signal 参数指定的信号后,接收过程将执行由 Function 参数指向的信号捕获函数。 将释放此类型的任何暂挂信号。 此地址在对其他信号管理函数 sighold sigrelse的调用中保留。 信号编号 Signal 作为信号捕获函数的唯一自变量传递。 在输入信号捕获函数之前,捕获信号的 Function 参数的值设置为 SIG_HOLD。 在从信号捕获处理程序正常返回期间,系统信号操作将恢复到 Function 参数,并且将释放此类型的任何挂起信号。 如果采用非本地 goto (请参阅 setjmp 子例程) ,那么必须调用 sigrelse 子例程以恢复系统信号操作并释放此类型的任何挂起信号。

从信号捕获函数返回后,接收过程将在中断时恢复执行,但实现定义的信号可能不为真的信号除外。

当在非原子操作 (例如在慢速设备 (例如终端) 上调用 readwriteopen ioctl 子例程) 期间发生要捕获的信号时; 在 pause 子例程期间; 在不立即返回的 wait 子例程期间,执行信号捕获函数。 然后,中断例程会向调用进程返回一个-1值,并将errno全局变量设置为EINTR

返回值

成功完成后, sigset 子例程返回指定 信号的系统信号操作的先前值。 否则,将返回 SIG_ERR ,并设置 errno 全局变量以指示错误。

对于 sigholdsigrelsesigignore 子例程,成功时将返回值 0。 否则,返回值为-1,并设置 errno全局变量来指示错误。

错误代码

如果满足以下条件,那么 sigsetsigholdsigrelse sigignore 子例程将失败:

描述
EINVAL 信号 值是非法信号编号,或者无法更改 信号 的缺省处理。