1. 首页
  2. 操作系统
  3. Unix
  4. sigsuspend函数-鸿鹄论坛_华为认证h35-211-hcnp-access network题库

sigsuspend函数-鸿鹄论坛_华为认证h35-211-hcnp-access network题库

上传者: 2024-07-15 20:03:51上传 PDF文件 18.16MB 热度 9次

10.16 sigsuspend函数上面已经说明,更改进程的信号屏蔽字可以阻塞或解除阻塞所选择的信号。使用这种技术可以保护不希望由信号中断的代码临界区。如果希望对一个信号解除阻塞,然后pause以等待以前被阻塞的信号发生,则又将如何呢?假定信号是SIGINT,实现这一点的一种不正确的方法是:如果在解除对SIGINT的阻塞和pause之间发生了SIGINT信号,则此信号被丢失。这是早期的不可靠信号机制的另一个问题。为了纠正此问题,需要在一个原子操作中实现恢复信号屏蔽字,然后使进程睡眠,这种功能是由sigsuspend函数所提供的。

include

int sigsuspend(const sigset_t *sigmask);

返回:-1, errno设置为EINTR。进程的信号屏蔽字设置为由sigmask指向的值。在捕捉到一个信号或发生了一个会终止该进程的信号之前,该进程也被挂起。如果捕捉到一个信号而且从该信号处理程序返回,则sigsuspend返回,并且该进程的信号屏蔽字设置为调用sigsuspend之前的值。注意,此函数没有成功返回值。如果它返回到调用者,则总是返回-1,并且errno设置为EINTR (表示一个被中断的系统调用)。实例程序10-15显示了保护临界区,使其不被指定的信号中断的正确方法。

可以参考更多关于临界区和信号处理的信息。以下是几个相关资源链接:

信号处理

用户评论