[linux仓库]调试Segmentation fault的利器:手把手教你开启和使用Core Dump[进程信号·叁]

[linux仓库]调试Segmentation fault的利器:手把手教你开启和使用Core Dump[进程信号·叁]


🌟 各位看官好,我是!

🌍 Linux == Linux is not Unix !


🚀 今天来学习Linux的core dump标志,理解core 和 term的区别。

👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享更多人哦!

目录

core dump 标志 

Core vs Term

思考

总结


core dump 标志 

在上一章节中,我们提到Core 和 Term 默认都是终止进程,只有在一些情况会出现区别:

信号有的是可以追踪的,有的是可以不被追踪的core dump表示不需要被追踪了

还记得这张图吗?当时我们在讲如果进程出现异常了,低7位表示退出信号,但是还有一位在那时并没有讲,而今天终于可以揭露这层面纱了.

先提出一个问题:如果我的进程出现异常了,我想不想知道是什么原因导致异常的?(像9号、2号这种信号就不需要,因为这是用户自己想退出的,因此默认行为是Term)

那肯定是想知道的,如 /0 和 野指针这种异常,我想知道是代码的哪一行导致了我的进程崩溃的.

  • core dump : 表示 核心转储,该标志位,表示的就是退出信号的详细退出类型.
  • OS会在进程结束的时候,把进程当前运行的上下文数据,dump转而存储到当前目录下,形成一个core文件 ! 这个文件可以让我们进行调试使用,定位出错行 ! (一种事后调试Post-mortem Debug)
  • ⼀个进程允许 产⽣多⼤的 core ⽂件取决于进程的 Resource Limit (这个信息保存 在PCB中)。默认是不允许产⽣ core ⽂件的, 因为 core ⽂件中可能包含用户密码等敏感信息,不安全。
  • 在开发调试阶段可以⽤ ulimit 命令改变这个限制,允许产生 core ⽂件。⽤ ulimit 命令改变 Shell 进程的 Resource Limit ,如允许 core ⽂件最⼤为 1024K: $ ulimit -c 1024.

Core vs Term

在ulimit -c开启core时,core形式终止,会发生core dump,term不会 ; 关闭时,二者等同。
int main() { pid_t id = fork(); if (id == 0) { // 子进程 sleep(2); int a = 10; a /= 0; exit(1); } int status = 0; pid_t rid = waitpid(id, &status, 0); if (rid > 0) { printf("exit code:%d , exit signal:%d , core dump:%d\n", (status >> 8) & 0xFF, status & 0x7F, (status >> 7) & 0x1); } return 0; } 

思考

  • 上⾯所说的所有信号产⽣,最终都要有OS来进⾏执行,为什么?OS是进程的管理者
  • 信号的处理是否是⽴即处理的?在合适的时候
  • 信号如果不是被⽴即处理,那么信号是否需要暂时被进程记录下来?记录在哪⾥最合适呢?
  • ⼀个进程在没有收到信号的时候,能否能知道,自己应该对合法信号作何处理呢?
  • 如何理解OS向进程发送信号?能否描述⼀下完整的发送处理过程?

总结

Linux中的coredump标志用于进程异常终止时的核心转储,通过记录进程上下文数据形成core文件,方便事后调试。与Term终止方式不同,coredump需要ulimit-c开启,且可能包含敏感信息。文章通过示例代码演示了子进程除零错误导致coredump的情形,并探讨了信号处理机制中OS的角色、信号延迟处理及存储位置等问题。

Read more

Llama-Factory的eval模块详解:准确率、困惑度等指标一览

Llama-Factory的eval模块详解:准确率、困惑度等指标一览 在大语言模型(LLM)快速迭代的今天,微调已不再是少数研究团队的专属技术。越来越多的企业和开发者希望基于开源模型定制自己的智能应用——从金融客服到医疗问答,从教育辅导到内容生成。然而,一个常被忽视的问题是:我们如何科学地判断一个微调后的模型真的“变好了”? 答案并不总是显而易见。你可能训练了几十个epoch,loss曲线一路下降,但最终生成的回答却越来越模板化;或者准确率高达90%,但在真实场景中仍然频繁出错。这些问题的背后,是对评估环节的轻视。 正是在这样的背景下,Llama-Factory 的 eval 模块显得尤为关键。它不仅仅是一个“跑个测试集出个分数”的工具,而是将模型评估系统化、标准化、自动化的关键组件。通过统一接口支持多种任务与指标,它让不同模型、不同训练策略之间的比较成为可能,也让实验结果更具可复现性。 准确率:简单却不容小觑的基础指标 说到评估,最直观的指标莫过于准确率(Accuracy)。它的定义极其朴素:预测正确的样本数占总样本的比例。公式也简洁明了: $$ \text{Accur

By Ne0inhk
llamafactory微调qwen3-vl详细流程

llamafactory微调qwen3-vl详细流程

llamafactory微调qwen3-vl详细流程 目标:本文讲详细介绍多模态大模型使用llama-factory进行多模态模型微调(sft)的全部流程,以及微调后合并和工业落地部署方案。具体包括: 1. 环境安装部署 2. 数据集准备 3. 启动微调 4. 模型合并 5. 模型部署和请求方式(vllm部署) 示例模型: qwen2.5-vl-instruct qwen3-vl-instruct 环境安装 llama-factory环境准备 方式1 git直接下载 git clone --depth https://github.com/hiyouga/LLaMA-Factory.git 方式2 下载项目压缩包再解压 python环境安装 1. python虚拟环境创建 * conda create --name llama_env python=3.12 (默认已安装好anaconda或者minianaconda) * conda

By Ne0inhk

主流ASR模型谁最强?Paraformer-large/Wav2Vec2/Whisper全面对比

主流ASR模型谁最强?Paraformer-large/Wav2Vec2/Whisper全面对比 语音转文字,也就是自动语音识别(ASR),现在已经是很多应用离不开的技术了。从手机语音助手到会议纪要生成,再到视频字幕制作,背后都有ASR模型在默默工作。 但市面上的ASR模型这么多,到底哪个最好用?哪个识别最准?哪个速度最快?今天我们就来一次硬核对比,看看三个主流模型——Paraformer-large、Wav2Vec2和Whisper——到底谁才是真正的“王者”。 我会从实际使用的角度出发,用大白话告诉你它们各自的优缺点,帮你找到最适合自己需求的那个。 1. 先认识一下三位“选手” 在开始详细对比之前,我们先简单了解一下这三位“选手”的基本情况。 1.1 Paraformer-large:来自阿里的“实力派” Paraformer是阿里达摩院开源的一个ASR模型系列,而Paraformer-large是其中的“大杯”版本。它有几个很突出的特点: * 非自回归架构:这是它名字里“Para”的由来。简单说,就是它预测文字的时候不是一个个字往外蹦,而是可以同时预测多个字,

By Ne0inhk

Stable-Diffusion-3.5城市规划辅助:景观效果图生成实践

Stable-Diffusion-3.5城市规划辅助:景观效果图生成实践 1. 引言:当AI画笔遇见城市规划 想象一下,你是一位城市规划师或景观设计师,面对一片待开发的空地或一个需要更新的老旧街区。客户或领导问:“这里未来会是什么样子?” 传统的做法是,你需要花费数天甚至数周时间,进行概念构思、草图绘制、建模渲染,才能产出一张初步的效果图。这个过程不仅耗时耗力,而且一旦方案需要调整,整个流程又得重来一遍。 现在,情况正在改变。借助 Stable Diffusion 3.5 (SD 3.5) 这样的新一代文本到图像生成模型,我们可以将脑海中的构想,用几句话描述出来,几分钟内就能看到高质量的视觉预览。这不仅仅是“画图”,而是一种全新的设计辅助和沟通工具。 本文将带你深入实践,看看如何利用基于 SD 3.5 优化的 Stable-Diffusion-3.5-FP8 镜像,快速、高效地生成城市规划与景观设计的效果图。我们将从零开始,一步步操作,

By Ne0inhk