sigwait说明

本文详细解析sigwait函数如何等待指定信号并处理信号队列中的信号,包括信号的基本概念、信号处理的步骤以及sigwait函数的用法和注意事项。重点突出信号在进程间通信中的作用和sigwait函数在实现高效信号处理时的关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sigwait函数详解

int
sigwait(const sigset_t
*restrict sigmask,
int* restrict signo);

sigwait函数一直阻塞直到*sigmask指定的任何一个信号被挂起为止,然后从挂起信号集中删除那个信号,并解除对它的阻塞。当sigwait返回时,从挂起信号集中删除的信号的个数被存储在signo指定的那个位置中。

信号是向进程发送的软件通知,通知进程有事件发生。引发信号的事件发生时,信号就被生成了。进程根据信号采取行动时,信号就被传递了。信号的寿命就是信号的生成和传递之间的时间间隔。已经生成但还未被传递的信号被称为挂起的信号。在信号生成和信号传递之间可能会有相当长的时间。

挂起就是未决pending(未处理的)

信号类似于处理事务
1。有事情发生了(信号产生)
2。该事情通知了有关部门,他们已登记在一个未处理事件的本子上(信号传递给目标进程,目标进程登记该信号到本进程的task_struct结构)
3。有关部门定期检查未处理事件的本子,发现有事情没处理时,就注销该事件(目标进程会检测是否有信号等待处理,如果有未决信号等待处理且该信号没有被进程阻塞,则在运行相应的信号处理函数前,进程会把信号在未决信号链中占有的结构卸掉)
4。最后有关部门去实施事件的处理。(进程注销信号后,立即执行相应的信号处理函数,执行完毕后,信号的本次发送对进程的影响彻底结束。)

int sigwait(const sigset_t *restrict sigmask, int* restrict signo);

sigwait函数一直阻塞直到*sigmask指定的任何一个信号被挂起为止,然后从挂起信号集中删除那个信号,并解除对它的阻塞。当sigwait返回时,从挂起信号集中删除的信号的个数被存储在signo指定的那个位置中。
这里的sigwait是阻塞本进程,去等待指定的信号。等到了就会解除阻塞。




函数名:

sigwait - wait for a signal
摘要
#include < signal.h> int sigwait(const sigset_t * set , int * sig );
Feature Test Macro Requirements for glibc (seefeature_test_macros(7)):
sigwait(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
描述:

sigwait() 提供了一种等待信号的到来,以串行的方式从信号队列中取出信号进行处理的机制。 sigwait()只等待函数参数中指定的信号集,即如果新产生的信号不在指定的信号集内,则 sigwait()继续等待。对于一个稳定可靠的程序,我们一般会有一些疑问:
  • 不要在线程的信号掩码中阻塞不能被忽略处理的两个信号 SIGSTOP 和 SIGKILL。
  • 不要在线程的信号掩码中阻塞 SIGFPE、SIGILL、SIGSEGV、SIGBUS。
  • 确保 sigwait() 等待的信号集已经被进程中所有的线程阻塞。
  • 在主线程或其它工作线程产生信号时,必须调用 kill() 将信号发给整个进程,而不能使用 pthread_kill() 发送某个特定的工作线程,否则信号处理线程无法接收到此信号。
  • 因为 sigwait()使用了串行的方式处理信号的到来,为避免信号的处理存在滞后,或是非实时信号被丢失的情况,处理每个信号的代码应尽量简洁、快速,避免调用会产生阻塞的库函数。
返回值:

     On success,sigwait() returns 0. On error, it returns a positive error number.


来源:

http://www.xuebuyuan.com/727702.html

http://baike.baidu.com/link?url=pEPpXKkCenonm9snnPwabsvrocU5LSUwW0Vn6x8sFX87xD-JSi2SswZi_FaREkGjJQsTihzqWZKy0J71zvXSRK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值