• 《信息安全系统设计与实现》学习笔记9


    第6章 信号和信号处理

    教材学习内容总结

    本章讲述了信号和信号处理;介绍了信号和中断的统一处理,有助于从正确的角度看待信号;将信号视为进程中断,将进程从正常执行转移到信号处理;解释了信号的来源,包括来自硬件、异常和其他进程的信号;然后举例说明了信号在Unix/Linux中的常见用法;详细解释了Unix/Linux中的信号处理,包括信号类型、信号向量位、信号掩码位、进程PROC结构体中的信号处理程序以及信号处理步骤;用示例展示了如何安装信号捕捉器来处理程序异常,如用户模式下的段错误;还讨论了将信号用作进程间通信(IPC)机制的适用性。读者可借助该编程项目,使用信号和管道来实现用于进程交换信息的进程间通信机制。

    一、信号和中断

    “中断”是从I/O设备或协处理设备发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。

    1、进程的概念

    一个”进程“(引号中)就是一系列活动。

    广义的”进程“包括:

    从事日常事物的人。
    在用户模式或内核模式下运行的Unix/Linux进程。
    执行机器指令的CPU。
    

    2、中断

    (1)人员中断

    (2)进程中断

    (3)硬件中断

    (4)进程的陷阱错误

    二、Unix/Linux中的信号处理

    1、信号类型

    Unix/Linux支持31种不同的信号,每种信号在signal.h文件中都有定义,每种信号都有一个符号名。

    #define SIGHUP 
    #define SIGINT 
    #define SIGQUIT 
    #define SIGILL 
    #define SIGTRAP
    #define SIGABRT 
    #define SIGBUS 
    #define SIGFPE 
    #define SIGKILL 
    #define SIGUSR1
    #define SIGSEGV 
    #define SIGUSR2
    #define SIGPIPE 
    #define SIGALRM  
    #define SIGTERM
    #define SIGSTKFLT 
    #define SIGCHLD
    #define SIGCONT
    #define SIGSTOP
    #define SIGTSTP
    #define SIGTTIN
    #define SIGTTOU
    #define SIGURG
    #define SIGXCPU 
    #define SIGXFSZ
    #define SIGVTALRM
    #define SIGPROF 
    #define SIGWINCH 
    #define SIGIO 
    #define SIGPWR
    #define SIGSYS
    

    2、信号来源

    (1)来自硬件的中断信号

    在执行过程中,一些硬件中断被转换为信号发送给进程硬件信号。

    (2)来自异常的信号

    当用户模式下的进程遇到异常时,会陷入内核模式,生成一个信号,并发送给自己。

    (3)来自其他进程的信号

    进程可以使用kill(pid,sig)系统调用向pid标识的目标进程发送信号。

    3、安装信号捕捉函数

    进程可使用系统调用:

    int r = signal(int signal_number,voide *handler);
    

    进程可使用信号调用向pid标识的另一个进程发送信号

    int r = kill(pid, signal_number);
    

    sh命令使用kill系统调用

    kill -s signal_number pid
    

    三、信号处理步骤

    (1)当某进程处于内核模式时,会检查信号并处理未完成的信号。
    (2)重置用户安装的信号捕捉函数:用户安装的陷阱相关信号捕捉函数用于处理用户代码中的陷阱错误。
    (3)信号和唤醒:在Unix/Linux内核中有两种SLEEP进程:深度休眠进程和浅度休眠进程。
    

    四、信号与异常

    Unix信号最初设计用于以下用途

    作为进程异常的统一处理办法。
    让进程通过预先安装的信号捕捉函数处理用户模式下的程序错误。
    在特殊情况下,它会让某个进程通过信号杀死另一个进程。
    
  • 相关阅读:
    Thinking in java(八)-正则表达式
    order by与索引
    order by与索引
    004_常量的设置
    008_ajax没有跳转页面的错误
    007_缺少aspactj依赖
    006_为什么我的本机地址是0.0.0.0.0.1
    005_mybatis逆向工程错误
    004_当用数据库账号密码不对时?
    059_SSM——JDK动态代理是怎么回事?它又是怎么运用到了SSM框架中的?
  • 原文地址:https://www.cnblogs.com/daijunxi2019/p/15526198.html
Copyright © 2020-2023  润新知