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

2017-08-07 20:05:41 +08:00
 HaoyangWei

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

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

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

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

写转储文件是继承当前进程的上下文的。
HaoyangWei
2017-08-08 16:18:43 +08:00
@pagxir 感谢耐心解答。
paw
2017-08-08 16:25:01 +08:00
第二段写一半开会去了,回来已经被解答了~ 囧
HaoyangWei
2017-08-08 17:21:58 +08:00
@paw 依然感谢 :D
jyf007
2017-12-12 15:35:29 +08:00
@HaoyangWei /t/414015 那个问题受限了,这里回答
饱醉豚原来还有各种脑洞大开的设想,比如核爆山体,改造成耕地,其中有一篇文章提到温州话,按他的想法是传承温州话要如何如何,结果呢,他只是一个口炮党,而我可以记录下来发音.
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.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/381160

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX