UNIX/Linux --信号相关知识

一、基本的概念
    1、中断

    中断概念:中止、暂停当前正在执行的进程,转而去执行其它的任务。
    硬中断:来自硬件设备的中断
    软中断:来自其它程序的中断
    
    2、信号
    信号是一种软中断,可以把他看作是进程与进程、内核与进程通信的一种方式,它为进程的异步执行,提供了技术支持。
    
    3、常见的信号

        SIGINT(2)    终端中断信号Ctrl+c
        SIGQUIT(3)    终端退出信号Ctrl+/ 
        SIGABRT(6)    调用abort函数产生的信号
        SIGFPE(8)    算术信号
        SIGKILL(9)    死亡信号
        SIGSEGV(11) 段错误信号
        SIGALRM(14) 闹钟信号
        SIGCHLD(17) 子进程结束信号
        SIGCONT(18) 进程继续信号
        SIGSTOP(19) 进程暂停信号
        SIGTSTP(20) 终端停止信号

 
    4、不可靠信号(非实时)
        1、编号小于SIGRGMI(34)的信号都是不可靠的,这些信号是建立在早期的信号机制上的,一个事件发生可能会产生多次信号。
        2、不可靠信号不支持排队,在接收信号的时候可能会丢失,如果一个发给一个进程多次,它可能只接收到一次,其它的可能就丢失了。    
        3、进程在处理这种信号的时候,哪怕设置的信号处理函数,当信号处理函数执行完毕后,会再次恢复成默认的信号处理方式。
        
    5、可靠信号(实时)
        1、位于[SIGRGMI(34),SIGRTMAX(64)]区间的都是可靠信号。
        2、可靠信号支持排队,不会丢失。
        3、无论是可靠信号还是不可靠信号都是通过:kill、signal、sigqueue、sigaction进行处理。
    
    6、信号的来源
        硬件来源:
            键盘:Ctrl+c、Ctrl+/、Ctrl+z
            驱动:硬件设备被激活、使用、失效。
            内存:非法访问内存。
        软件来源:
            命令:kill、killall
            函数:kill/raise/alarm/setitimer/sigqueue。
            
    7、信号的处理方式
        1、忽略
        2、终止
        3、终止+core

core dump 把内存的使用情况扔出来。
        core文件是一种二进制文件,需要一些高度工具才能解析出来(gdb)。
        1、gcc -g code.c -> 生成带调试信息的可执行文件。
        2、运行可执行文件产生core文件
        3、gdb ./a.out core 程序会停止在产生错误的位置。

ubuntu默认不产生core的,需要使用命令设置:
            ulimit -c unlimited


        
        4、捕获并处理

猜你喜欢

转载自blog.csdn.net/weixin_42205987/article/details/81208308