免费注册 查看新帖 |

Chinaunix

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

7--信号(UNIX) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-12 10:05 |只看该作者 |倒序浏览
   信号是通知进程已发生某种条件的一种技术。例如,若某一进程执行除法操作,其除数为0,则将名为SIGFPE的信号发送给该进程。进程如何处理信号有三种选择:
(1) 忽略该信号。有些信号表示硬件异常,例如,除以0或访问进程地址空间以外的单元等,因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。
(2) 按系统默认方式处理。对于0除,系统默认方式是终止该进程。
(3) 提供一个函数,信号发生时则调用该函数。使用这种方式,我们将能知道什么时候产生了信号,并按所希望的方式处理它。
   很多条件会产生信号。有两种键盘方式,分别称为中断键(interrupt key,通常是Delete键或Ctrl-C)和退出键(quit key,通常是Ctrl-\),它们被用于中断当前运行进程。另一种产生信号的方法是调用名为kill的函数。在一个进程中调用此函数就可向另一个进程发送一个信号。当然这样做也有些限制:当向一个进程发送信号时,我们必需是该进程的所有者。
实例
   如果调用程序,然后键入中断键,则执行此程序的进程终止。产生这种后果的原因是:对于此信号(SIGINT)的系统默认动作是终止此进程。该进程没有告诉系统核对此信号作何处理,所以系统按默认方式终止该进程。为了更改此程序使其能捕捉到该信号,它需要调用signal函数,指定当产生SIGINT信号时要调用的函数名。因此编写了名为sig_int的函数,当其被调用时,它只是打印一条消息,然后打印一个新提示符。
sig_int(int signo)
{
    printf("interrupt err\n%% ";
}
int main(void)
{
    ***
    signal(SIGINT,sigint);
    ***
}

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/34065/showart_276217.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP