Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10058
  • 博文数量: 4
  • 博客积分: 170
  • 博客等级: 入伍新兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-12 20:05
文章分类
文章存档

2008年(4)

我的朋友
最近访客

分类: LINUX

2008-11-13 11:51:51

                 信号
   1:信号分为可靠信号和不可靠信号两种.
   不可靠信号是小于32的信号,也称标准信号.它的不可靠表示程序有可能对信号采取了错误处理和信号丢失.在unix中,在信号程序处理完不可靠信号后,系统会自动把信号处理改为默认,所以我们处理不可靠信号的时候每次都要重设信号处理.但是linux系统已经改进,可以不用重设不可靠信号处理了.
   可靠信号是大于等于32小于64的信号.也称为实时信号.
   2:产生信号函数:
   kill(),raise(),alarm(),sigqueue(),setitimer(),abort().
   3:捕捉信号函数
   signal(),sigaction().
   4:阻塞信号函数
   sigemptyset(sigset_t *set)初始化由set指定的信号集,信号集里面的所有信号被清空;
   sigfillset(sigset_t *set)调用该函数后,set指向的信号集中将包含linux支持的64种信号;
   sigaddset(sigset_t *set, int signum)在set指向的信号集中加入signum信号;
   sigdelset(sigset_t *set, int signum)在set指向的信号集中删除signum信号;
   sigismember(const sigset_t *set, int signum)判定信号signum是否在set指向的信号集中。
   sigprocmask(int  how,  const  sigset_t *set, sigset_t *oldset));用来设置阻塞信号的
   sigpending(sigset_t *set));获得当前的阻塞信号
   sigsuspend(const sigset_t *mask));程序挂起,等待信号
   5:信号注意点:
   1)alarm(int)函数,一个进程只能维护一个时钟函数.这个函数是在规定的时间完成后给程序发送SIGALRM信号,信号的默认处理是终结进程.如果一个进程中有两个或者两个以上时钟的话,那么后一个设置的时钟返回值是前一个时钟的剩余时间.
   2)sigprocmask()函数能够根据参数how来实现对信号集的操作,主要有三种:
     SIG_BLOCK   把当前的set中指定的信号集阻塞起来.
     SIG_UNBLOCK 接触当前的set中指定的信号集的阻塞.
     SIG_SETMASK 更新进程阻塞信号集为set指向的信号集.
     同时在阻塞的过程中,如果是不可靠信号,则一个信号不管发生多少回,只记录第一次的.如果是可靠信号则全部放进信号队列.
   3)信号处理虽然不会被同种信号打断,但是可以被别的信号打断.   
 

  
 
阅读(481) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:用socket实现本地通信

给主人留下些什么吧!~~