V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
HaoyangWei
V2EX  ›  Linux

请教一下, Linux 上 coredump 是如何生成的?

  •  
  •   HaoyangWei · 2017-08-07 20:05:41 +08:00 · 3325 次点击
    这是一个创建于 2663 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有两个问题,试着在这里请教一下: 在进程收到某些信号之后,coredump 是由该进程自己生成的还是由系统,或者其父进程生成的? 如果通过 ionice 调低进程的 io 优先级,那么在生成 coredump 文件时,能否避免其他进程的 io 被阻塞?

    8 条回复    2017-12-12 15:56:28 +08:00
    paw
        1
    paw  
       2017-08-08 13:42:04 +08:00   ❤️ 1
    在进程收到某些信号之后,coredump 是由该进程自己生成的还是由系统,或者其父进程生成的?
    ///////////////////////////////////
    内核在退出内核态 /中断处理结束时,会检查进程是否有未处理信号,调用相应的信号处理函数,而你说的某些信号,如果没有被指定处理函数,会调用默认的处理函数也就是生成 core 并杀掉进程。所以 core 这个过程是由内核完成的,操作时的 current 指向的是 core 掉的进程。
    ------------------------------------
    如果通过 ionice 调低进程的 io 优先级,那么在生成 coredump 文件时,能否避免其他进程的 io 被阻塞?
    //////////////////////////////////
    core 写入过程是由内核线程完成的,它的写优先级是否是继承 current 的,这个还真没注意过.....
    HaoyangWei
        2
    HaoyangWei  
    OP
       2017-08-08 14:39:17 +08:00
    @paw 感谢耐心解答。
    不过仍有一些疑惑,“操作时的 current 指向的是 core 掉的进程”,这里的“ current ”之值什么我不太明白,能否解释一下?
    pagxir
        3
    pagxir  
       2017-08-08 16:13:55 +08:00   ❤️ 1
    @HaoyangWei current 指的是当前执行代码的线程上下文,可以理解程当前的这个进程 /线程。

    其实 core 文件是系统捕获的需要生成 core 文件的信号时,由系统生成的内存转储文件,生成 dump 文件个过程就相当于你讲对应信号处理函数设置成了 exit。

    即相当于你进程发起了一次不再返回的系统调用,在这个系统调用里会使用当前处理信号的线程的上下文打开文件并写入内存转储然后关闭文件,当处理完之后,接着就是结束进程 /跟普通的 exit 的处理流程一般无异常。

    写转储文件是继承当前进程的上下文的。
    HaoyangWei
        4
    HaoyangWei  
    OP
       2017-08-08 16:18:43 +08:00
    @pagxir 感谢耐心解答。
    paw
        5
    paw  
       2017-08-08 16:25:01 +08:00
    第二段写一半开会去了,回来已经被解答了~ 囧
    HaoyangWei
        6
    HaoyangWei  
    OP
       2017-08-08 17:21:58 +08:00
    @paw 依然感谢 :D
    jyf007
        7
    jyf007  
       2017-12-12 15:35:29 +08:00   ❤️ 1
    @HaoyangWei /t/414015 那个问题受限了,这里回答
    饱醉豚原来还有各种脑洞大开的设想,比如核爆山体,改造成耕地,其中有一篇文章提到温州话,按他的想法是传承温州话要如何如何,结果呢,他只是一个口炮党,而我可以记录下来发音.
    jyf007
        8
    jyf007  
       2017-12-12 15:56:28 +08:00
    还是原来发的马太 7:15
    mo2 tha3 7:15(nyi2-da3-ko1) ian1-ke1 wao1-bei3 ko2-gei1 shi1-tsy1,
    gi1-da3-ko1 teo3 nyi2-ta3 lei1,
    va3-mi3 zy2 yi1-nyi1 ,
    da3-zy2 tei2-mi3 zy2 shiuao1-o4-gei za1-luao1.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5320 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:29 · PVG 09:29 · LAX 17:29 · JFK 20:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.