10.13 sigpending函数
Posted U201013687
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.13 sigpending函数相关的知识,希望对你有一定的参考价值。
函数sigpending被阻塞发送并且当前被调用该函数的进程挂起的信号,这个信号集通过参数set返回.
#include <signal.h>
int sigpending(sigset_t *set);
Returns:0 if OK,-1 on error.
Example
#include "apue.h"
static void sig_quit(int);
int main(void)
{
sigset_t newmask,oldmask,pendmask;
if(signal(SIGQUIT, sig_quit) == SIG_ERR)
err_sys("can‘t catch SIGQUIT");
/*
* Block SIGQUIT and save current signal mask
*
*/
sigemptyset(&newmask);
sigaddset(&newmask, SIGQUIT);
if(sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
err_sys("SIG_BLOCK error");
sleep(5); /*SIGOUT here will remain pending*/
if(sigpending(&pendmask) < 0)
err_sys("sigpending error");
if(sigismember(&pendmask, SIGQUIT))
printf("\nSIGQUIT pending\n");
/*
* Restore signal mask whick unblocks SIGQUIT.
*/
if(sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
err_sys("SIG_SETMASK error");
printf("SIGQUIT unblocked\n");
sleep(5); /*SIGQUIT here will terminate with core file */
exit(0);
}
static void sig_quit(int signo)
{
printf("caught SIGQUIT\n");
if(signal(SIGQUIT, SIG_DFL) == SIG_ERR)
err_sys("can‘t reset SIGQUIT");
}
执行效果如下图:
[email protected]:~/UnixProgram/Chapter10$ ./10_15.exe
^\^\^\
SIGQUIT pending
caught SIGQUIT
SIGQUIT unblocked
^\Quit
[email protected]:~/UnixProgram/Chapter10$ ./10_15.exe
SIGQUIT unblocked
[email protected]:~/UnixProgram/Chapter10$
以上是关于10.13 sigpending函数的主要内容,如果未能解决你的问题,请参考以下文章
linux c编程:信号 sigprocmask和sigpending函数
Linux进程间通信 -- 信号集函数 sigemptyset()sigprocmask()sigpending()sigsuspend()