免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1607 | 回复: 6
打印 上一主题 下一主题

求助:UNIX中的信号堵塞问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-10 19:24 |只看该作者 |倒序浏览
在看APUE第十章里有一段话:
"调用l o n g j m p时有一个问题。当捕捉到一个信号时,进入信号捕捉函数,此时当前信号被
自动地加到进程的信号屏蔽字中。这阻止了后来产生的这种信号中断此信号处理程序."
是指调用SETJMP才会触发这一机制还是指当捕捉到一个信号时,进入信号捕捉函数,此时当前信号即会被自动堵塞。我跑了一下书上的EG14,发现信号并没有被捕捉啊?

论坛徽章:
0
2 [报告]
发表于 2004-08-11 01:56 |只看该作者

求助:UNIX中的信号堵塞问题?

指的是捕捉到一个信号时

论坛徽章:
0
3 [报告]
发表于 2004-08-11 10:45 |只看该作者

求助:UNIX中的信号堵塞问题?

我试了一下,和书上讲的不一样啊,信号并不堵塞,这是我的例子.环境是SCO5:
#include <signal.h>;
#include <time.h>;

static void sig_usr1(int), sig_usr2(int);

int main(int argc, char *argv[])
{
if (signal(SIGUSR1, sig_usr1) == SIG_ERR)
printf("err!\n";
for (; {
pause();
}
}

static void sig_usr1(int signo)
{
        printf("sin_int1 starting!\n";
        if (signal(SIGUSR1, sig_usr2) == SIG_ERR)
                printf("err@!\n";
        for(;
                pause();
}
static void sig_usr2(int signo)
{
        printf("sig_usr2 starting!\n";
        return;
}

论坛徽章:
0
4 [报告]
发表于 2004-08-11 16:02 |只看该作者

求助:UNIX中的信号堵塞问题?

POSIX保证信号处理程序在运行的时候被捕获的信号是阻塞的。如果信号被阻塞的时候发生了一次或是多次,通常在解阻塞后只传递一次,在这里可以理解为不是实时的。

论坛徽章:
0
5 [报告]
发表于 2004-08-11 17:57 |只看该作者

求助:UNIX中的信号堵塞问题?

楼上的,不好意思,没太看懂,解除堵塞应该是在信号处理程序返回时吧?

论坛徽章:
0
6 [报告]
发表于 2004-08-12 10:56 |只看该作者

求助:UNIX中的信号堵塞问题?

没错

论坛徽章:
0
7 [报告]
发表于 2004-08-13 17:21 |只看该作者

求助:UNIX中的信号堵塞问题?

处理当前信号时,系统会把次信号加入屏蔽集中,比如你^C了两次,第一次的时候系统去处理信号函数,去处理的时候这个信号是被屏蔽的。如果你按了三次,从信号处理函数返回后阻塞信号集中有2个信号,但只会再向你发出一个。实时信号处理方法跟此不同
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP