LinuxC信号-进程间通信方式之一

1.信号特性:
  简单但不可靠,不能携带大量信息,特定条件才触发。
  包括软件中断和硬件中断。
    软件中断如:调用abort、raise,alarm,setitimer等函数触发的中断
    硬件中断如:除0导致的SIGFPE(浮点数例外),非法访问内容导致的SIGSEGV(段错误),非法内容对齐等导致的总线错误(SIGBUS) 等等

2.信号三要素:
  1)编号:信号编号范围是1~64。1~31为常规信号编号。34-64为实时信号。
  2)事件:同时每个编号对应一个触发事件。如1->SIGHUP,2->SIGINT,3->SIGQUIT,... man 7 signal 可查看全部信号。
       常见对应事件:Ctr+c 产生SIGINT(2),Ctrl+\ 产生SIGQUIT(3),Ctrl+z 产生SIGTSTP(20),
       除0操作 产生SIGFPE(8)浮点数例外,非法访问内存 产生SIGSEGV(11)段错误,非法内存对齐等 产生SIGBUS(7)总线错误
  3)默认动作:包括 Term终止进程,Ign忽悠,Core终止进程并生成Core文件,Stop暂停进程,Cont继续进行。
        注意:SIGKILL(9)和SIGSTOP(19)信号不允许被屏蔽、忽略、捕捉等,只能执行默认动作。SIGKILL默认终止进程,SIGSTOP默认暂停进程。

3.信号发送函数
  kill(pid,sig)函数:发送sig信号。pid>0给指定进程 发送sig信号,pid=0给同组进程 发送sig信号,pid<-1给指定进程组 发送sig信号,pid=-1给所有进程 发送sig信号。
  raise(sig) 函数:给当前进程发送sig信号。
  abort() 函数:给当前进程发送SIGABRT信号。
  alarm(sec) 函数:sec大于0时表示sec秒后给当前进程发送SIGALRM信号。sec=0表示取消定时器。每个进程只有唯一一个定时器。
  setitimer() 函数:周期定时器,which可选:ITIMER_REAL(自然定时,产生SIGALRM信号)、ITIMER_VIRTUAL(虚拟用户空间计时,产生SIGVTALRM信号)、ITIMER_PROF(运行时计时,产生SIGPROF信号)
          
3.信号集

  


猜你喜欢

转载自www.cnblogs.com/yongfengnice/p/11953839.html