当前位置: 首页 > news >正文

Linux操作系统5-进程信号1(信号基础)

上篇文章:Linux操作系统4-进程间通信5(共享内存实现两个进程通信)-CSDN博客

本篇Gitee仓库:myLerningCode/l25 · 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com)

本篇重点:信号的概念

一. 信号基础

1.1 生活中的信号

        我们日常生活中的闹钟,红绿灯,车喇叭,通知等都是信号。信号的目的就是通知某一个物体去做某一件事情。

       我们再日常生活中收到信号之后可能的反映:

1 根据收到的信号去做某一件事(比如红灯停)

2 收到某信号后啥也不做(闹钟响了继续睡)

3 忽略某一个信号(将手机关机)

1.2 进程信号

        进程信号最简单的例子就是:我们的一个程序在前台运行,我们输入 ctrl c 去终止这个进程。我们输入 ctrl c 之后正在运行的进程就会收到一个信号然后终止。

        我们可以输入 kill -l 查看所有的信号

        可以看到一共有64个信号,其中34编号以上的信号是实时信号,这里不过多介绍 。只讨论34号以下的普通信号。

1.3 信号原理简介⭐

        首先我们要知道:信号是给进程发送的,比如 kill -9 进程pid。就是给某一个进程发送9号信号让其强制终止。

        那么问题来了:进程是如何保存信号的呢?信号是如何发送的呢?

        信号保存在进程的进程控制块PCB中,在task_struct中有一个位图signal,当进程收到x编号的信号之后,就将位图的x位写为1,表示收到这个信号了。但是进程收到信号之后不一定会立马处理这一个信号,可能要过一再在处理。

        进程的发送是由OS操作的,因为OS是进程的管理者,OS可以直接向某一个进程的PCB中写入数据。

        我们无论以何种方式向进程发送信号,本质都是通过OS去修改PCB中的数据。

1.4 进程处理信号的3种方式 

1 忽略收到的信号

2 执行该信号的默认操作,或者程序员自定义的操作

3 收到信号后啥也不做

1.5 信号的生命周期⭐

        信号的生命周期为:信号的产生 -> 信号的保存 -> 信号的处理。具体过程如下图:

相关文章:

  • 如何安全获取股票实时数据API并在服务器运行?
  • Nacos
  • Angular从入门到精通教程篇章
  • 每日一题-设计食物评分系统,哈希表的有效使用
  • 【MySQL】索引(中)
  • 基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局
  • MYSQL表的操作
  • ROS2软件调用架构和机制解析:Publisher创建
  • 上位机知识篇---SSHSCPTFTONFS
  • 查看ITHOR全部仿真家庭场景
  • 用DeepSeek生成批量删除处理 PDF第一页工具
  • 【MySQL】CAST()在MySQL中的用法以及其他常用的数据类型转换函数
  • vue 项目部署到nginx 服务器
  • 生成网页链接二维码
  • 优化 EF Core 和 LINQ 以实现高性能应用程序
  • HarmonyOS学习第10天: 解锁线性布局的魔法排列
  • FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台
  • 【Elasticsearch】jvm.options.d JVM(Java虚拟机)选项配置
  • Docker 数据卷管理及优化
  • element中el-table表头通过header-row-style设置样式
  • 天成信息网站建设自助建站平台/搜索广告
  • 哈尔滨seo整站优化/做企业推广的公司
  • 做爰网站名称/百度seo营销
  • 建设了网站怎么管理/沐浴露营销软文
  • 番禺做网站设计/优秀的品牌策划案例
  • 做产品的淘宝客网站/成都官网seo厂家