当前位置: 技术问答>linux和unix
学习linux的新手问:linux进程信号掩码以及信号阻塞与信号未决怎么理解?
来源: 互联网 发布时间:2016-09-15
本文导语: 看了文章:Linux环境进程间通信(二): 信号(上) http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html Linux环境进程间通信(二): 信号(下) http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html 里面提到信号阻塞 ...
看了文章:Linux环境进程间通信(二): 信号(上)
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html
Linux环境进程间通信(二): 信号(下)
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html
里面提到信号阻塞 信号未决, 以及掩码要怎么理解?特别第二篇文章的这段
sigwaitinfo()
该函数与sigsuspend()类似,阻塞一个进程直到特定信号发生,但信号到来时不执行信号处理函数,而是返回信号值。因此为了避免执行相应的信号处理函数,必须在调用该函数前,使进程屏蔽掉set指向的信号,因此调用该函数的典型代码是:
sigset_t newmask;
int rcvd_sig;
siginfo_t info;
sigemptyset(&newmask);
sigaddset(&newmask, SIGRTMIN);
sigprocmask(SIG_BLOCK, &newmask, NULL);
rcvd_sig = sigwaitinfo(&newmask, &info)
if (rcvd_sig == -1) {
..
}
sigprocmask(SIG_BLOCK, &newmask, NULL); 这句话怎么是屏蔽掉set指向的信号,应该是在掩码中加入该信号吧?第一次接触这个信号,望各位高人详细解释下
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html
Linux环境进程间通信(二): 信号(下)
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html
里面提到信号阻塞 信号未决, 以及掩码要怎么理解?特别第二篇文章的这段
sigwaitinfo()
该函数与sigsuspend()类似,阻塞一个进程直到特定信号发生,但信号到来时不执行信号处理函数,而是返回信号值。因此为了避免执行相应的信号处理函数,必须在调用该函数前,使进程屏蔽掉set指向的信号,因此调用该函数的典型代码是:
sigset_t newmask;
int rcvd_sig;
siginfo_t info;
sigemptyset(&newmask);
sigaddset(&newmask, SIGRTMIN);
sigprocmask(SIG_BLOCK, &newmask, NULL);
rcvd_sig = sigwaitinfo(&newmask, &info)
if (rcvd_sig == -1) {
..
}
sigprocmask(SIG_BLOCK, &newmask, NULL); 这句话怎么是屏蔽掉set指向的信号,应该是在掩码中加入该信号吧?第一次接触这个信号,望各位高人详细解释下
|
看UNIX环境高级编程第二版的第十章.
熟读APUE是正道, 别看网上那些文章了.
熟读APUE是正道, 别看网上那些文章了.
|
信号掩码是线程相关的,含义大概是:
这些信号被本线程阻塞,所以收不到,"停留在半路,不会到达",这就是信号未决。
但是一旦UNBLOCK这些信号,仍然可以收到。并执行信号处理函数;
SIGWAITINFO函数会阻塞,等待newmask参数中的某一个信号到达,返回。
这些信号被本线程阻塞,所以收不到,"停留在半路,不会到达",这就是信号未决。
但是一旦UNBLOCK这些信号,仍然可以收到。并执行信号处理函数;
SIGWAITINFO函数会阻塞,等待newmask参数中的某一个信号到达,返回。
|
LS回答的都不错,差不多就是那个意思。
加一句。通过线程mask,阻塞线程,直到状态发生改变。
在我们现在用的redhat 系列的linux中,阻塞的信号无论你发多少次,它只发一次。
加一句。通过线程mask,阻塞线程,直到状态发生改变。
在我们现在用的redhat 系列的linux中,阻塞的信号无论你发多少次,它只发一次。
|
嗯是的。 非实时信号一般都是不排队。
补充一下 SIGWAITINFO函数会阻塞,等待newmask参数中的某一个信号到达,返回。
但是不执行信号处理函数。
补充一下 SIGWAITINFO函数会阻塞,等待newmask参数中的某一个信号到达,返回。
但是不执行信号处理函数。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。