【Linux】关于获取进程退出状态中的core dump标志补充

news2024/11/19 1:34:48

通过 wait/waitpid 可以获取子进程的退出状态, 从而判断其退出结果.

记录退出状态的 int 变量 status 的使用情况如下图所示:

如果是收到信号终止的话, 低 7 位为收到的终止信号, 而低第 8 位为 core dump 标志, core dump 标志有什么用呢? core dump 标志只存 0/1, 表示是否被设置, 当 core dump 为 1 时, 表示程序出现异常, 并受到了相应的 Core 信号, 此时 OS 会对该程序的部分核心代码进行核心转储, 将其从内存中转储到磁盘中, 并且生成 core-xxx 文件.

以下是可能发送 Core 的信号:

模拟场景描述: 程序中存在除零错误.

模拟环境: 云服务器.

示例代码:

#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
using namespace std;

int main()
{
    pid_t pid = fork();
    if(pid == 0)
    {
        cout << "Running..." << endl;
        cout << "Running..." << endl;
        cout << "Running..." << endl;

        int n = 10 / 0; //测试除零异常

        cout << "Div Zero Error..." << endl;
        cout << "Div Zero Error..." << endl;
        cout << "Div Zero Error..." << endl;
    }
    
    int status = 0;
    pid_t ret = waitpid(pid, &status, 0);
    if(WIFEXITED(status))
    {
        cout << "Exit Code is " << WEXITSTATUS(status) << endl;
    }
    else
    {
        cout << "Signal is " << (status & 0x7f) << ", Core Dump is " << ((status >> 7) & 1) << endl;
    }

    return 0;
}

代码描述: 子进程中存在除零错误, 收到信号后终止, 父进程等待获取退出信息.

运行结果:

可以看到, 收到的退出信号为:

翻译过来就是浮点异常, 这里没问题, 但是可以看到此时的 core dump 标志为 0, 这不符合预期, 应该是 1 才对, 原因就出在在云服务器环境下, core dump 资源是被默认关闭的, 通过指令:

ulimit -a

可以查看当前系统中特定资源的上限:

 

可以看到 core file size 为 0, 也就是该资源是出于关闭状态的, 自然 core dump 标志就不会被设置了, 通过指令:

ulimit -c 1024

设置该资源上限大小为 1024:

此时再次运行程序观察结果:

可以看到, 因为除零错误 core dump 标志被设置为 1, 除此之外还生成了一个名为 core.2442 的文件, 2442 即为子进程的 pid, 那么该文件有什么用呢? 

该文件的作用为可以通过 gdb 自动定位到程序异常的问题所在处, 省去了我们手动定位问题的时间, 如下:

补充: 为什么云服务器会默认关闭 core file 呢? 往上可以看到单个 core 文件的大小虽然不大, 但如果一个进程因为某种错误大量循环生成 core 文件, 而又恰好因为得不到即时解决, 很可能导致系统服务被宕掉.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍

文章目录 前言一、移除链表元素二、链表的中间节点三、合并两个有序链表四、反转链表五、链表分割六、倒数第k个节点总结 前言 leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍 一、移除链表元…

解决go install 网络问题

rootiZbp1hiqzlhh6w05gloffgZ:~# go install mvdan.cc/garblelatest go: mvdan.cc/garblelatest: module mvdan.cc/garble: Get "https://proxy.golang.org/mvdan.cc/garble/v/list": dial tcp 172.217.160.81:443: i/o timeout解决方法 更换阿里代理 rootiZbp1hiq…

js——数据操作——实现阶梯价格排序——基础积累

最近在写网络报价的时候&#xff0c;遇到一个需求&#xff0c;就是要根据采购数量&#xff0c;找到符合数量的阶梯区间&#xff0c;并找到最便宜的采购价格。 比如下面&#xff1a; let originViewList [{id:1,incrementalQuantity:10,priceList:[{minQuantity:1,price:20},…

加速短剧出海,优秀出海产品技术服务金帆奖颁布

当碎片化内容消费成为主流&#xff0c;短剧凭借其短小精悍、环环相扣、高频爆点等优势迅速拿捏大众喜好。作为泛娱乐市场又一个新兴的亮点&#xff0c;不止国内&#xff0c;伴随着碎片娱乐的海外移动观剧习惯持续培养&#xff0c;短剧供给量与消费规模不断上升&#xff0c;海外…

使用DockerFile 编写 指令来构建镜像

文章目录 前言使用DockerFile 编写 指令来构建镜像1. 构建2. 验证 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#x…

【课后练习分享】Java用户注册界面设计和求三角形面积的图形界面程序

目录 java编程题&#xff08;每日一练&#xff09;&#xff1a; 问题一的答案代码如下&#xff1a; 问题一的运行截图如下&#xff1a; 问题二的答案代码如下&#xff1a; 问题二的运行截图如下&#xff1a; java编程题&#xff08;每日一练&#xff09;&#xff1a; 1.…

内存马实战(持续更新中)

注&#xff1a;这篇文章记录在我的语雀里面&#xff0c;语雀格式好看一点&#xff0c;地址&#xff1a; https://ganmaocai.yuque.com/ghgp8x/zoy1yn/faet35ae9gpxzn61 计划 复现以下框架的内存马注入&#xff1a; shiro&#xff1a; 普通内存马 冰蝎马 WebSocket马 xxl-job…

【Linux】-Elasticsearch安装部署[16]

目录 简介 安装 1、添加yum仓库 2、安装es 3、配置es 4、启动es 5、关闭防火墙 6、测试 简介 全文搜索属于最常见的要求&#xff0c;开源的Elasticsearch&#xff08;以下简称es&#xff09;是目前全文搜索引擎的首选。它可以快速的储存、搜索和分析海量数据。维基百科…

蓝牙模块七种工作模式——蓝牙Mesh组网工作模式

蓝牙Mesh组网模块技术在2017年得到SIG批准&#xff0c;这是一种独立的网络技术&#xff0c;兼容4及5系列蓝牙协议。它把蓝牙设备作为信号中继站&#xff0c;利用低功耗蓝牙广播的方式进行信息收发&#xff0c;蓝牙Mesh组网技术拓展了蓝牙的通讯关系&#xff0c;打破了以往蓝牙设…

Vue3 ts实现将assets中的图片转为file格式,实现本地图片选择上传功能

Vue3 ts实现将assets中的图片转为file格式&#xff0c;实现本地图片选择上传功能 1、需求描述2、关键代码3、img标签src使用变量打包后图片无法展示 1、需求描述 用户可以选项系统固定的几个图标&#xff0c;也可以自定义上传图片。系统固定图标存在 src\assets\images\app 路径…

6款网页表白代码6(附带源码)

6款网页表白代码6 前言效果图及部分源码1.爱心倒计时2.一起看星星3.爱心4.爱心&#xff08;有鼠标移动特效&#xff09;5.爱心&#xff08;高级效果&#xff09;6.爱心&#xff08;3D效果&#xff09; 领取源码下期更新预报 前言 大部分人都有喜欢的人&#xff0c;学会这些表白…

综述 | 走向图对比学习:综述与展望

【摘要】近年来&#xff0c;图的深度学习在各个领域取得了显著的成功。然而&#xff0c;对带注释的图形数据的依赖仍然是一个很大的瓶颈&#xff0c;因为它的成本过高且耗费时间。为了应对这一挑战&#xff0c;图的自监督学习(SSL)得到了越来越多的关注&#xff0c;并取得了重大…

hubilder Android模拟器华为手机连接不上

APP真机测试注意点&#xff1a; 1. 同一个局域网下 2. 手机连接USB模式&#xff08;华为选择USB配置&#xff1a;音频来源&#xff09; &#xff0c;开发者模式 3. 实在不行重启HBuilderX再运行真机 可是卡在了“正在安装手机端HBuilder调试基座...” 就没反应了&#xff1f;&…

rust的版本问题,安装问题,下载问题

rust的版本、安装、下载问题 rust版本问题&#xff0c; 在使用rust的时候&#xff0c;应用rust的包&#xff0c;有时候包的使用和rust版本有关系。 error: failed to run custom build command for pear_codegen v0.1.2 Caused by: process didnt exit successfully: D:\rus…

功耗相关总结

文章目录 功耗相关的使用场景MCU中低功耗的应用RTOS中低功耗应用 功耗相关的使用场景 目前越来越多的嵌入式设备采用电池进行供电&#xff0c;而不是跟台式电脑一样&#xff0c;可以一直连接着电源。在电池供电的场景下&#xff0c;对功耗的要求很高&#xff0c;工程师们尽量希…

查看当前Shell系统环境变量

查看当前Shell系统环境变量 查看命令 env效果 查看Shell变量(系统环境变量自定义变量函数) 命令 set效果 常用系统环境变量 变量名称含义PATH与windows环境变量PATH功能一样&#xff0c;设置命令的搜索路径&#xff0c;以冒号为分割HOME当前用户主目录&#xff1a;/rootSH…

uniapp中使用 iconfont字体

下载 iconfont 字体文件 打开 iconfont.css 文件&#xff0c;修改一下 把文件 复制到 static/iconfont/… 目录下 在App.vue中引入iconfont 5. 使用iconfont 使用 iconfont 有两种方式&#xff0c; 一种是 class 方式&#xff0c; 一种是使用 unicode 的方式 5.1 使用 class 的…

DNS域名解析与智能选路

要开始访问公网了&#xff01;&#xff01; 你在访问百度的时候&#xff0c;你也不知道百度的IP地址是啥&#xff0c;你只知道他的域名是baidu AD这台设备可以做入站的负载平衡&#xff0c;AD来选择你访问的时候是用联通网还是电信网&#xff0c;避免卡顿 pc并不会域名解析&…

在aspNetCore中 使用System.Text.Json的定制功能, 将定制化的json返回给前端

C# 默认大写, 而大部分的前端默认小写, 这时候可以如此配置: builder.Services.AddControllers().AddJsonOptions((opt) > {opt.JsonSerializerOptions.PropertyNamingPolicy System.Text.Json.JsonNamingPolicy.CamelCase;opt.JsonSerializerOptions.WriteIndented true…

案例 | 澳鹏自动驾驶标注方案入选虎嗅智库行业报告

随着自动驾驶技术发展及方案演进&#xff0c;市场对于数据标注的数量和质量的需求都呈现指数级增长。传统的手工标注已不能满足标注需求&#xff0c;自动标注伴随大模型的发展应运而生。 在这一背景下&#xff0c;虎嗅智库发布《自动驾驶数据标注技术落地洞察》&#xff0c;并…