• 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. 实时信号的注册
  • 相关阅读:
    十天学前端之JS篇(五)
    Llama2-Chinese项目:2.3-预训练使用QA还是Text数据集?
    [VSCode] 替换掉/去掉空行
    设计模式有哪些?
    go——垃圾回收机制(GC)
    C# 显示OpenCV的mat对象图像
    百度地图API各版本说明书
    腾讯前端二面常考react面试题总结
    读书笔记: 这就是搜索引擎
    leetcode (力扣) 201. 数字范围按位与 (位运算)
  • 原文地址:https://blog.csdn.net/m0_60010936/article/details/128208981