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

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

通过 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 文件, 而又恰好因为得不到即时解决, 很可能导致系统服务被宕掉.

相关文章:

  • Google Earth Engine(GEE)深度学习入门教程-Python数据读入篇
  • npm build报错Cannot find module ‘html-webpack-plugin‘解决方法
  • 设计模式—23种设计模式重点 表格梳理
  • cherry-markdown公式不好选中的问题
  • 国产PS插件新选择;StartAI平替中的佼佼者!
  • 微软的野望:下一代操作系统
  • 软考结束。有什么要说的
  • 关于Profinet远程IO模块的超详细讲解
  • 前端 JS 经典:构建工具
  • Java 编程入门:从零开始
  • linux学习(六)
  • 【Linux】:Linux 2.6内核 调度队列和调度原理
  • JavaWeb_SpringBootWeb
  • 手搓顺序表(C语言)
  • 代码随想录算法训练营Day2|977.有序数组的平方、59.螺旋矩阵||、 209.长度最小的子数组
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [译] React v16.8: 含有Hooks的版本
  • Angular 2 DI - IoC DI - 1
  • es6
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Java的Interrupt与线程中断
  • PhantomJS 安装
  • RxJS: 简单入门
  • sessionStorage和localStorage
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue全家桶实现一个Web App
  • 从0到1:PostCSS 插件开发最佳实践
  • 记录:CentOS7.2配置LNMP环境记录
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前嗅ForeSpider中数据浏览界面介绍
  • 手机端车牌号码键盘的vue组件
  • 一份游戏开发学习路线
  • 你对linux中grep命令知道多少?
  • const的用法,特别是用在函数前面与后面的区别
  • postgresql行列转换函数
  • zabbix3.2监控linux磁盘IO
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #Spring-boot高级
  • (1)(1.13) SiK无线电高级配置(六)
  • (3)选择元素——(17)练习(Exercises)
  • (52)只出现一次的数字III
  • (8)STL算法之替换
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (done) 声音信号处理基础知识(4) (Understanding Audio Signals for ML)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (solr系列:一)使用tomcat部署solr服务
  • (zhuan) 一些RL的文献(及笔记)
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • *ST京蓝入股力合节能 着力绿色智慧城市服务