• Linux进程通信之进程信号


    一、信号的概念:

    信号机制是Linux最基本的通讯机制,它可以用来向一个或者多个进程发送异步事件信息,传送少量信息。信号是一个软件中断,并且是一个“软中断”(只是告诉有这样一个信号,但这个信号具体如何进行处理、什么时候处理,都是由进程决定的,所以是软中断)

    二、信号的产生:

    硬件产生:

            “ctrl+c ”:2号信号;“ctrl+z”:20号信号;“ctrl+|”:3号信号

    软件产生:

            kill函数

    int kill(pid_t pid,int sig)

    参数:

    pid:要操作的进程号;sig:具体信号

    给pid进程发送sig信号

    eg:kill(getipd(),2)

            raise函数

    int raise(int sig)

     参数:sig:具体信号类型

    谁调用给谁发信号

    三、信号的种类:

    Linux系统中定义了一些列的信号类型,这些信号可以由内核或者系统中的其他具有设当权限的进程产生,对于收到信号的进程,其task_struct结构体中的signal属性的某一位置位,使用kill-l命令可以列出所有已经定义的信号:

    非可靠信号:(非实时信号)

    1~31 :可能会丢失信号

    可靠信号:(实时信号)

    34~64:一定不会丢失的信号

    总共有62个信号。


    四、信号的处理方式:

    操作系统对信号的处理方式(man 7 signal中查看)

    term、core、cont、ign、stop

    默认的处理方式:SIG_DFL,操作系统当中已经定义好了信号的处理方式了

    忽略处理方式为:SIG_IGN ,该信号为忽略处理(子进程退出时给父进程发送的信号SIGCHID,其处理方式为忽略处理,所以父进程忽略处理,没有回收其退出状态信息,导致子进程成为僵尸进程)

    自定义的处理方式:程序员可以更改信号的处理方式,定义一个函数,当进程收到该信号时,调用自定义的函数

    五、信号的注册:

    概念:一个进程收到了一个信号,这个过程称之为注册,信号的注册和注销是两个独立的过程

    内核中信号注册位图以及sigqueue队列的了解:
    注册位图、sigqueue都是进程当中的内容,每一个进程都有自己独有的注册位图和sigque

    非实时信号与实时信号在注册时的区别:

    1. 非实时信号的注册
    2. 实时信号的注册
  • 相关阅读:
    Java基础面试题(背诵篇)
    nosql期末
    【红外与可见光图像融合】离散平稳小波变换域中基于离散余弦变换和局部空间频率的红外与视觉图像融合方法(Matlab代码实现)
    20240620日志:TAS-MRAM的电阻开放分析
    Avalonia为DataGrid添加行点击事件
    Redis-使用jedis连接linux中redis服务器失败的解决方案
    actix http消息处理源码剖析
    Linux操作系统的发展
    火遍全网的杠精哥配音怎么制作?
    SpringMVC之CRUD(直接让你迅速完成部署)
  • 原文地址:https://blog.csdn.net/m0_60010936/article/details/128208981