linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux开发区 > 软件开发 >
栏目导栏
资料搜索
热门文章
·Linux 下 C 语言编程
·Linux下的通用线程池创建
·C++字符串转换篇
·linux C 进程操作篇
·linux上的C/C++编译器gcc/egcs
·linux C 文件权限控制篇
·GCC使用手册
·linux C 接口处理篇
·在Redhat Linux上安装 GCC 编译
·GCC使用指南
·C语言运算符
·Linux下C开发环境的构成和安装
·fopen()函数的参数说明
·GCC使用手册与常用命令
·Scheme 语言介绍
最新文章
·在Ubuntu Linux 8.04上构建GCC
·Linux操作系统下Socket编程地址
·将VC程序移植到Linux系统的几点
·Linux下malloc/free与new/dele
·Linux下用GTK和socket实现简单
·Linux操作系统下让Tomcat启动在
·Linux操作系统中如何编译C程序
·几种常被人们忽略的Linux系统下
·Eclipse编程工具 在Ubuntu下的
·Linux操作系统下的网络地址转换
·老手经验谈:Linux驱动程序开发
·Linux操作系统多线程同步Mutex
·Linux操作系统下C程序语言简易
·Linux系统平台下关于GCC编译及
·解决Linux系统下管道被接受方关
Google
 
Linux操作系统的信号机制详细介绍
[ 作者:  加入时间:2007-01-11 11:41:40  来自:Linux联盟收集 ]

信号是unix中所使用的进程通信的一种最古老的方法。系统使用它来同志一个或多个进程异步事件的发生。

linux系统库bits/signum.h对信号名作了定义:

linux的大多数信号是提供给内核的,仅有少数几种信号可以在信号间发送。

.SIGHUP 当终止一个终端时,内核就把这种信号发送给该终端所控制的所有进程。

.SIGINT 当一个用户按下中断键(ctrl+c)后,内核就向该终端用关联的所有进程发送这个信号。

.SIGQUIT 当用户按下(ctrl+),内核就向该终端用关联的所有进程发送这个信号。

.SIGILL 当一个进程企图执行一条非法指令时,内核就发送这个信号。

.SIGFPE 当产生浮点错误时,内核就发送这个信号。

.SIGKILL 这是一个非常特殊的信号,他可以从一个进程发送到另一个进程,使接收到该信号的进程终止。内核偶然也发送这种信号。

.SIGALRM 当一个定时器到时的时候,内核就发送这个信号。

.SIGSTOP 子进程结束信号.UNIX用它来实现系统调用exit(),wait();

信号的处理

unix的系统调用signal()用于接受一个指定的信号,并可以指定相应的处理方法。

在linux系统库signal.h中,它的说明如下:

signal(int sig,sighandler_t handler);

sig用于指定信号类型。handle是用于处理该信号的函数。

handle还可以是:

.SIG_IGN 忽略这个信号。

.SIG_DFL 恢复对这个信号的默认处理。

例如:

  #include 
  #include 
  #include 
  
  main(){ 
  signal(SIGINT,SIG_IGN); 
  printf("hello!n"); 
  sleep(10); 
  printf("hellon"); 
  }

上面的代码忽略了SININT信号。

又例如:

  #include 
  #include 
  #include 
  
  int catch(int sig); 
  
  main(){ 
  signal(SIGINT,catch); 
  printf("hello!n"); 
  sleep(10); 
  printf("hello!n"); 
  } 
  
  int catch(int sig){ 
  printf("catch signaln"); 
  return 1; 
  }
  

当用户按下ctrl+c时,进程被中断,catch()被执行.中断处理函数处理完毕后,转回断点执行下面的指令。

当编写自己的中断处理函数时,注意下面两点:

1.信号不能打断系统调用。

2.信号不能打断信号处理函数。

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息