Linux操作系统5-进程信号3(信号产生总结与核心转储)

上篇文章:Linux操作系统5-进程信号2(信号的4种产生方式,signal系统调用)-CSDN博客

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

本篇重点:核心转储

目录

一. man 7 signal

二. core dumped 核心转储 ⭐

2.1 核心转储的使用

2.2 看不到核心转储文件的处理方式 

三. 自定义所有的信号的行为

四. 信号的相关概念


一. man 7 signal

        可以使用 man 7 signal查看信号的具体信息

可以看到在Action这一栏中有很多不同的行为

其中,让进程退出的有两种 Core 与 Term

Core : 异常退出

Term : 正常退出

二. core dumped 核心转储 ⭐

2.1 核心转储的使用

        这里通过一份非法访问内存的代码来说明 core dumped

#include <iostream>#include <unistd.h>int main()
{std::cout << "进程pid:" << getpid() << std::endl;int arr[10];arr[10000] = 100;return 0;
}

运行结果如下: 

        

可以看到, 在段错误后面还有一个 core dumped表示异常退出

        这里我使用的是云服务器, 如果想要使用核心转储文件, 需要执行下面的命令打开

ulimit  -a        查看资源

 可以看到核心转储文件是0

ulimit -c 文件大小         即可使用核心转储文件

此时在运行test即可看到一个核心转储文件

         

核心转储文件的命名为 core.文件名.进程pid

        我们可以通过核心转储文件快速定义程序出错的地方

我们对test进行调试, 调试的时候输入 core-filre + 核心转储文件

这种调试的方式称为事后调试 

当然也能直接 gdb 调试的程序 + 核心转储文件        直接快速定位错误

如果我们的退出方式是temp, 则不会产生核心转储文件

#include <iostream>#include <unistd.h>int main()
{std::cout << "进程pid:" << getpid() << std::endl;while(1) sleep(1);int arr[10];arr[10000] = 100;return 0;
}

使用 ctrl c 发送的2号命令是trem        所以不会产生核心转储文件 

2.2 看不到核心转储文件的处理方式 

        如果使用了 ulimt -c 文件大小 还是没有核心转储文件生成的话可见检查核心转储文件的位置

该位置有系统参数core_pattern决定, 使用下面的命令可以查看

cat /proc/sys/kernel/core_pattern

 一般这个都以一个管道开头 | 

如果想要生成在当前目录下, 可以执行下面的命令

echo "./core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern

三. 自定义所有的信号的行为

        如果我们自定义所有信号的行为, 那么进程是不是永远不会退出了?

使用代码来测试一下

#include <iostream>
#include <string>#include <sys/types.h>
#include <signal.h>
#include <unistd.h>void catchSig(int signo)
{while (true){std::cout << "进程:" << getpid() << " 获取一个信号编号,编号是:" << signo << std::endl;sleep(1);}
}int main()
{for (int i = 0; i <= 34; i++)signal(i, catchSig);while (1)sleep(1);return 0;
}

可以看到, 自定义了所有信号的行为, 9号信号仍能结束进程(9号信号无法被自定义

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26204.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux《基础开发工具(上)》

在之前的篇章当中我们已经了解了Linux当中基本的指令以及相关的知识&#xff0c;那么接下来在本篇当中就开始学基本的开发工具&#xff0c;在此我们一共要了解6大开发工具&#xff0c;在此将这些工具的学习分为上中下篇&#xff0c;在本篇当中我们首先要来学习的是yun以及vim,一…

kali liux的下载

Kali Linux | Penetration Testing and Ethical Hacking Linux Distributionhttps://www.kali.org/ VMware虚拟机https://pan.quark.cn/s/aa869ffbf184 【补充一个今天学到的知识昂和内容无关:&#xff08;遥感&#xff09;指非接触的远距离探测技术&#xff0c;使用传感器探…

微软AI900认证备考全攻略:开启AI职业进阶之路

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正深刻地改变着我们的工作和生活。微软AI900认证作为AI领域的权威认证之一&#xff0c;不仅为技术爱好者提供了深入探索AI的机会&#xff0c;更是开启AI职业进阶之路的重要敲门砖。以下是一份全面的备考攻略&am…

【Mark】记录用宝塔+Nginx+worldpress+域名遇到的跨域,301,127.0.0.1,CSS加载失败问题

背景 想要用宝塔搭建worldpress&#xff0c;然后用域名直接转https&#xff0c;隐藏掉ipport。 结果被折磨了1天&#xff0c;一直在死活在301&#xff0c;127.0.0.1打转 还有css加载不了的情况 因为worldpress很多是301重定向的&#xff0c;所以改到最后我都不知道改了什么&am…

算法题001——移动零

移动零 力扣——移动零点击链接即可跳转 这道题的数组被划分为两个区间&#xff0c;前一个区间为 非零元素&#xff0c;而后一个指针是 零元素 我们运用双指针&#xff0c;先定义两个指针&#xff0c;分别为 dest 和 cur , cur用来遍历整个数组&#xff0c;而 dest 表示我们…

Selenium自动化测试:如何搭建自动化测试环境,搭建环境过程应该注意的问题

最近也有很多人私下问我&#xff0c;selenium学习难吗&#xff0c;基础入门的学习内容很多是3以前的版本资料&#xff0c;对于有基础的人来说&#xff0c;3到4的差别虽然有&#xff0c;但是不足以影响自己&#xff0c;但是对于没有学过的人来说&#xff0c;通过资料再到自己写的…

mysql 全方位安装教程

下载 MySQL 【官网下载地址】 注意要选择较大的哪个安装包&#xff0c;小的安装包是一个安装器。 我们不用登录&#xff0c;直接下载 直接运行下载好的安装包 MySQL如果是 安装包安装, 可以图形化界面自主配置 如果是压缩包解压, 可以配置 配置文件, 可以解压安装到指定的…

深入刨析 之C++ string类

欢迎来到干货小仓库&#xff01;&#xff01;&#xff01; 没有完美的计划&#xff0c;每个人都在试验的过程中渐渐清晰!!! 1.标准库的string类 a. string是表示字符串的字符串类。 b. 该类的接口与常规容器的接口基本相同&#xff0c;再添加了一些专门用来操作string的常规操…

【AI论文】MedVLM-R1:通过强化学习激励视觉语言模型(VLMs)的医疗推理能力

摘要&#xff1a;推理是推进医学影像分析的关键前沿领域&#xff0c;其中透明度和可信度对于赢得临床医生信任和获得监管批准起着核心作用。尽管医学视觉语言模型&#xff08;VLMs&#xff09;在放射学任务中展现出巨大潜力&#xff0c;但大多数现有VLM仅给出最终答案&#xff…

深入理解并实现自定义 unordered_map 和 unordered_set

亲爱的读者朋友们&#x1f603;&#xff0c;此文开启知识盛宴与思想碰撞&#x1f389;。 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 在 C 的标准模板库&#xff08;STL&#xff09;中&#xff0c;unorder…

使用ChatGPT-Deep Reaserch两步给出文献综述!

文献综述是学术论文写作中不可或缺的一部分&#xff0c;它不仅是对已有研究的梳理和总结&#xff0c;更是为后续研究奠定理论基础的关键步骤。通过文献综述研究者能够全面了解当前研究领域的现状、主要观点和研究方法&#xff0c;从而找到自己研究的切入点和创新点。这一过程需…

[Java基础] JVM常量池介绍(BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗)

文章目录 1. JVM内存模型2. 常量池中有什么类型&#xff1f;3. 常量池中真正存储的内容是什么4. 判断一个字符串(引用)是否在常量池中5. BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗&#xff1f;6. 获取堆内存使用情况、非堆内存使用情况 1. JVM内…

塔能科技:工厂智慧照明,从底层科技实现照明系统的智能化控制

在全球节能减碳和智慧生活需求激增的背景下&#xff0c;基于“用软件定义硬件&#xff0c;让物联运维更简捷更节能”的产品理念&#xff0c;塔能科技的智慧照明一体化方案如新星般崛起&#xff0c;引领照明行业新方向。现在&#xff0c;我们来深入探究其背后的创新技术。该方案…

RabbitMq-消息确认机制-消息队列可靠投递

RabbitMq-消息确认机制-消息队列可靠投递 发送端确认 ConfirmCallback 在spring中开启ConfirmCallback&#xff0c; springboot rabbitmq属性配置spring.rabbitmq.publisher-confirm和spring.rabbitmq.publisher-confirm-type详解_弃用的配置属性 spring.rabbitmq.publisher-…

水滴tabbar canvas实现思路

废话不多说之间看效果图,只要解决了这个效果水滴tabbar就能做出来了 源码地址 一、核心实现步骤分解 布局结构搭建 使用 作为绘制容器 设置 width=600, height=200 基础尺寸 通过 JS 动态计算实际尺寸(适配高清屏) function initCanvas() {// 获取设备像素比(解决 Re…

散户如何实现自动化交易下单——篇1:体系介绍与获取同花顺资金账户和持仓信息

一、为什么要实现自动化交易 在瞬息万变的金融市场中&#xff0c;越来越多的散户投资者开始尝试构建自己的交易策略&#xff1a;有人通过技术指标捕捉趋势突破&#xff0c;有人利用基本面分析挖掘低估标的&#xff0c;还有人设计出复杂的网格交易或均值回归模型。然而&a…

32位,算Cache地址

32位&#xff0c;算Cache地址

cursor 弹出在签出前,请清理仓库工作树 窗口

问题出现的背景&#xff1a;是因为我有两台电脑开发&#xff0c;提交后&#xff0c;另一个电脑的代码是旧的&#xff0c;这个时候我想拉取最新的代码&#xff0c;就会出现如下弹窗&#xff0c;因为这个代码暂存区有记录或者工作区有代码的修改&#xff0c;所以有冲突&#xff0…

基于Ant Design Vue 引入 Flowable 【workflow-bpmn-modeler-antdv】流程设计器组件

安装Ant Design Vue npm i --save ant-design-vue1.7.2安装less相关依赖 npm install less3.9.0 less-loader5.0.0 --save-dev安装设计器 npm i workflow-bpmn-modeler-antdv在src目录下创建flowable文件夹&#xff0c;并创建Demo.vue文件 <template><div style&q…

Linux云计算SRE-第十五周

1.总结Dockerfile的指令和Docker的网络模式 一、Dockerfile 核心指令详解 1、基础构建指令 指令 功能描述 关键特性 FROM 指定基础镜像&#xff08;必须为首条指令&#xff09; - 支持多阶段构建&#xff1a;FROM node AS builder - scratch 表示空镜像 RUN 在镜像构建…