signal 的第1个参数signum表示要捕捉的信号,第2个参数是个函数指针,表示要对该信号进行捕捉的函数,该参数也可以是SIG_DEF(表示交由系统缺省处理,相当于白注册了)或SIG_IGN(表示忽略掉该信号而不做任何处理)。signal如果调用成功,返回以前该信号的处理函数的地址,否则返回 SIG_ERR。

sighandler_t是信号捕捉函数,由signal函数注册,注册以后,在整个进程运行过程中均有效,并且对不同的信号可以注册同一个信号捕捉函数。该函数只有一个参数,表示信号值。
示例:
1、  捕捉终端CTRL+c产生的SIGINT信号:
#include 
#include 
#include 
#include

void SignHandler(int iSignNo)
{
    printf("Capture sign no:%d ",iSignNo); 
}
 
int main()
{
    signal(SIGINT,SignHandler); 
    while(true) 
        sleep(1); 
    return 0; 
}

该程序运行起来以后,通过按 CTRL+c将不再终止程序的运行。应为CTRL+c产生的SIGINT信号已经由进程中注册的SignHandler函数捕捉了。该程序可以通过 Ctrl+终止,因为组合键Ctrl+能够产生SIGQUIT信号,而该信号的捕捉函数尚未在程序中注册。
2、  忽略掉终端CTRL+c产生的SIGINT信号:
#include 
#include 
#include 
#include 
 
int main()
{
    signal(SIGINT,SIG_IGN); 
    while(true) 
        sleep(1); 
    return 0; 
}

该程序运行起来以后,将CTRL+C产生的SIGINT信号忽略掉了,所以CTRL+C将不再能是该进程终止,要终止该进程,可以向进程发送SIGQUIT信号,即组合键CTRL+
 
3、  接受信号的默认处理,接受默认处理就相当于没有写信号处理程序:
 
#include 
#include 
#include 
#include 
 
int main()
{
    signal(SIGINT,DEF); 
    while(true) 
        sleep(1); 
    return 0; 
}

最新文章

  1. 服务器Ubuntu16.04下连接锐捷
  2. paper 100:何恺明经典去雾算法
  3. WPF Window 服务安装
  4. Java 读写方案
  5. SQL行转列汇总
  6. android ListView_Tiger
  7. java.util.HashSet源码分析
  8. leetcode@ [289] Game of Life (Array)
  9. SQL Server 2008R2 数据库出现“可疑”导致无法访问
  10. checkbox操作
  11. hdu1443(约瑟夫环游戏的原理 用链表过的)
  12. 关于js封装框架类库之选择器引擎(二)
  13. 【算法专题】工欲善其事必先利其器—— C++ STL中vector(向量/不定长数组)的常用方法总结
  14. C++ 头文件系列 (bitset)
  15. ckeditor django admin 中使用
  16. 使用Builder模式创建复杂可选参数对象
  17. JDBC-C3P0
  18. JavaScript的DOM对象
  19. SQLServer语言之DDL,DML,DCL,TCL
  20. Latex citation using natbib and footnotesize

热门文章

  1. react-native 判断是不是IPhone X
  2. 关于udo3d双目相机的嵌入式板子系统重装
  3. Remove Nth Node From End of List(链表,带测试代码)
  4. Kalendae使用总结
  5. Go语言:变参函数
  6. maven打包自动配置数据库链接信息
  7. 百科知识 scm文件如何打开
  8. WinKawaks使用技巧
  9. nload 命令
  10. vue2.0 + vux (三)MySettings 页