免费注册 查看新帖 |

Chinaunix

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

信号问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-21 11:28 |只看该作者 |倒序浏览
请问linux下的signal的处理方式是否和中断的处理方式相同?

就是说:如果某个信号产生了,那么进程就保存目前的工作,然后去调用相应的signal handler,处理完signal handler后,返回(如果可以返回),然后进程恢复之前的工作。

请问整个流程是这样的吗?谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-04-21 15:20 |只看该作者

回复 #1 sewenew 的帖子

不一样啊. 中断处理是运行在中断上下文中的,而普通的信号处理是运行在进程上下文中的!

论坛徽章:
0
3 [报告]
发表于 2007-04-21 16:41 |只看该作者

回复 #2 scutan 的帖子

恩,上下文肯定是不同的,我想知道的是下面这个处理信号的流程是否正确?

如果某个信号产生了,那么进程就保存目前的工作,然后去调用相应的signal handler,处理完signal handler后,返回(如果可以返回),然后进程恢复之前的工作。

谢谢!

论坛徽章:
0
4 [报告]
发表于 2007-05-31 23:28 |只看该作者
up,我也想知道,有人告诉下?

论坛徽章:
0
5 [报告]
发表于 2007-06-01 20:04 |只看该作者
a发信号到b。man 2 kill
kill 在a的上下文中操作b的信号相关的数据结构。
。。。。
内核发现b该运行了,发现它有个信号。
。。。

论坛徽章:
0
6 [报告]
发表于 2007-06-01 20:08 |只看该作者
细节我不记得了,最重要的一点就是信号处理程序并不是进程自愿的,当然进程能告诉内核要不要处理信号,怎么处理(什么函数)

比如wget的时候,如果连接不上,我们看到的就是它阻塞在connect上,在内核态阻塞,你按crtl-c,实际上就是给你的程序一个信号,从阻塞态到运行态。于是运行之前发现信号,于是通常就默认结束。

论坛徽章:
0
7 [报告]
发表于 2007-06-02 02:35 |只看该作者
希望这个程序符合你的要求
/*  We'll start by writing the function which reacts to the signal
    which is passed in the parameter sig.
    This is the function we will arrange to be called when a signal occurs.
    We print a message, then reset the signal handling for SIGINT
    (by default generated by pressing CTRL-C) back to the default behavior.
    Let's call this function ouch.  */

#include <signal.h>
#include <stdio.h>
#include <unistd.h>

void ouch(int sig)
{
    printf("OUCH! - I got signal %d\n", sig);
    (void) signal(SIGINT, SIG_DFL);
}

/*  The main function has to intercept the SIGINT signal generated when we type Ctrl-C .
    For the rest of the time, it just sits in an infinite loop,
    printing a message once a second.  */

int main()
{
    (void) signal(SIGINT, ouch);

    while(1) {
        printf("Hello World!\n");
        sleep(1);
    }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP