LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1548|回复: 2

linux raise() 函数被阻塞??

[复制链接]
发表于 2008-10-30 18:04:46 | 显示全部楼层 |阅读模式
很简单的一个程序,
void SigAlrmHdl(int v_iSigNo) {
    printf("SigAlrmHdl_BEGIN\n");
    while(1);
    printf("SigAlrmHdl_END\n");
}

int main() {
     signal(SIGALRM, SigAlrmHdl);

    printf("raise_BEGIN\n");
    raise(SIGALRM);
    printf("raise_END\n");

    while(1);

    return 0;
}

结果是
raise_BEGIN
SigAlrmHdl_BEGIN
就停住了,证明raise()被阻塞了,有什么办法能够不阻塞raise和kill调用呢?
发表于 2008-10-31 10:33:56 | 显示全部楼层
信号处理是打断主程序执行,执行完信号处理函数才回到主程序流程,这样你的程序就死循环在信号处理函数里了,不是raise阻塞
回复 支持 反对

使用道具 举报

发表于 2008-11-1 23:36:49 | 显示全部楼层
void SigAlrmHdl(int v_iSigNo) {
printf("SigAlrmHdl_BEGIN\n");
while(1);   //这一句请去掉
printf("SigAlrmHdl_END\n");
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表