SIGSET - Linux手册页

时间:2019-08-20 18:01:20  来源:igfitidea点击:

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)。

InterfaceAttributeValue
sigset(),sighold(),
sigrelse(),sigignore()
Thread safetyMT-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起,这些问题已得到解决。

另外参见

kill(2),pause(2),sigaction(2),signal(2),sigprocmask(2),raise(3),sigpause(3),sigvec(3),signal(7)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/