当前位置: 技术问答>linux和unix
sigpending的疑问
来源: 互联网 发布时间:2016-10-18
本文导语: 俺写了个代码: #include "apue.h" #include #include void pr_mask(const char *str); int main(void) { sigset_t pendmask; sigset_t oldmask; sigset_t newmask; sigemptyset(&newmask); sigaddset(&newmask, SIGINT);//加入中断信号 ...
俺写了个代码:
为什么输出结果是"SIGINT is not in pendmask??
#include "apue.h"
#include
#include
void pr_mask(const char *str);
int main(void)
{
sigset_t pendmask;
sigset_t oldmask;
sigset_t newmask;
sigemptyset(&newmask);
sigaddset(&newmask, SIGINT);//加入中断信号
if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) != 0)
{
err_sys("sigprocmask errorn");
}
//获取当前的进程屏蔽字
if (sigpending(&pendmask) != 0)
{
err_sys("sigpengding errorn");
}
else
{
//判断SIGINT是否在屏蔽字中
if (sigismember(&pendmask, SIGINT))
{
printf("SIGINT is in pendmaskn");
}
else
{
printf("SIGINT is not in pendmaskn");
}
}
return 0;
}
为什么输出结果是"SIGINT is not in pendmask??
|
sigpending用于检测是否有有未处理(pending)的信号。
楼主需要给程序发送SIGINT啊。
下面的程序sleep 5 秒,如果5秒内按了Ctrl+C, 就会打印输出
SIGINT is in pendmask
楼主需要给程序发送SIGINT啊。
下面的程序sleep 5 秒,如果5秒内按了Ctrl+C, 就会打印输出
SIGINT is in pendmask
#include
#include
#include
#define err_sys(args...) fprintf(stderr, args)
void sig_intr(int sig)
{
}
void pr_mask(const char *str);
int main(void)
{
sigset_t pendmask;
sigset_t oldmask;
sigset_t newmask;
signal(SIGTERM, sig_intr);
sigemptyset(&newmask);
sigaddset(&newmask, SIGINT);//加入中断信号
if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) != 0)
{
err_sys("sigprocmask errorn");
}
sleep(5);
//获取当前的进程屏蔽字
if (sigpending(&pendmask) != 0)
{
err_sys("sigpengding errorn");
}
else
{
//判断SIGINT是否在屏蔽字中
if (sigismember(&pendmask, SIGINT))
{
printf("SIGINT is in pendmaskn");
}
else
{
printf("SIGINT is not in pendmaskn");
}
}
return 0;
}
|
某些版本的系统中,signal设置的信号处理动作会自动恢复为默认处理,但是现在可能不是这样了
也不是所有版本的系统都是这样的行为
推荐使用sigaction 设置,可以确定不会恢复为默认处理。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。