SIGSET - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-08-13
名称
sigset,sighold,sigrelse,sigignore-System V信号API
语法
#包括
typedef void(* sighandler_t)(int);
sighandler_t sigset(int sig,sighandler_t disp);
int sighold(int sig);
int sigrelse(int sig);
int sigignore(int sig);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
sigset(),sighold(),sigrelse(),sigignore():
- _XOPEN_SOURCE>= 500
说明
这些函数在glibc中作为兼容接口提供给使用历史System V信号API的程序。该API已过时:新应用程序应使用POSIX信号API(sigaction(2),sigprocmask(2)等)
sigset()函数修改信号sig的布置。 disp参数可以是信号处理程序函数的地址,也可以是以下常量之一:
- SIG_DFL
- 将信号的设置重置为默认值。
- SIG_IGN
- 忽略信号。
- SIG_HOLD
- 将sig添加到进程的信号掩码中,但不更改sig的配置。
如果disp指定信号处理程序的地址,则在处理程序执行期间将sig添加到进程的信号掩码中。
如果将disp指定为SIG_HOLD以外的其他值,则将从进程的信号掩码中删除sig。
SIGKILL和SIGSTOP的配置无法更改。
sighold()函数将sig添加到调用进程的信号掩码中。
sigrelse()函数从调用进程的信号掩码中删除sig。
sigignore()函数将sig的设置设置为SIG_IGN。
返回值
成功后,如果sig在调用之前被阻塞,则sigset()返回SIG_HOLD;如果在调用之前未被阻止,则返回信号的先前处置。发生错误时,sigset()返回-1,并设置errno来指示错误。 (但请参见下面的错误。)
sighold(),sigrelse()和sigignore()函数在成功时返回0;否则,返回0。如果出错,这些函数将返回-1并设置errno来指示错误。
错误说明
对于sigset(),请参见sigaction(2)和sigprocmask(2)下的错误。
对于sighold()和sigrelse(),请参见sigprocmask(2)下的错误。
对于sigignore(),请参见sigaction(2)下的错误。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
sigset(),sighold(), sigrelse(),sigignore() | Thread safety | MT-Safe |
遵循规范
SVr4,POSIX.1-2001,POSIX.1-2008。这些功能已过时:请勿在新程序中使用它们。 POSIX.1-2008将sighold(),sigignore(),sigpause(3),sigrelse()和sigset()标记为过时,建议使用sigaction(2),sigprocmask(2),pthread_sigmask(3)和而不是sigsuspend(2)。
备注
这些功能出现在glibc 2.1版中。
sighandler_t类型是GNU扩展;此页面仅用于使sigset()原型更易于阅读。
sigset()函数提供可靠的信号处理语义(如在调用sigaction(2)且sa_mask等于0时)。
在系统V上,signal()函数提供的语义不可靠(例如,在调用sigaction(2)且sa_mask等于SA_RESETHAND | SA_NODEFER时)。在BSD上,signal()提供可靠的语义。 POSIX.1-2001未指定signal()的这些方面。有关更多详细信息,请参见signal(2)。
为了等待信号,BSD和System V都提供了一个名为sigpause(3)的函数,但是此函数在两个系统上具有不同的参数。有关详细信息,请参见sigpause(3)。
BUGS
在2.2之前的glibc版本中,如果将disp指定为SIG_HOLD以外的其他值,则sigset()不会取消阻止sig。
在glibc 2.5之前的版本中,在两种情况下sigset()无法正确返回信号的先前处理。首先,如果将disp指定为SIG_HOLD,则成功的sigset()始终返回SIG_HOLD。相反,它应返回信号的先前处置(除非信号被阻塞,在这种情况下应返回SIG_HOLD)。其次,如果信号当前被阻塞,则成功的sigset()的返回值应为SIG_HOLD。而是返回信号的先前配置。自glibc 2.5起,这些问题已得到解决。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。