首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >强制应用程序核心转储并退出的正确方法是什么?

强制应用程序核心转储并退出的正确方法是什么?
EN

Stack Overflow用户
提问于 2011-04-13 19:08:38
回答 5查看 7.6K关注 0票数 8

我刚刚遇到了一些使用kill系统调用向应用程序发送SIGSEGV信号的代码。这背后的理由是,这将迫使应用程序核心转储和退出。对我来说,这似乎是错误的,这是正常的做法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-13 19:38:34

如果您希望生成核心转储,则SIGQUIT是发送给程序的正确信号。kill是发送信号的正确命令行程序(它的名字当然不好,因为不是所有的信号都会杀死程序)。

注意,您不应该向程序发送随机信号,并不是所有信号都会产生核心转储。它们中的许多将由程序本身处理,要么被消耗,要么被忽略,要么引发其他处理。因此,发送SIGSEGV是错误的。

GCC说:http://www.gnu.org/s/libc/manual/html_node/Termination-Signals.html

POSIX/Unix说:http://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html

票数 11
EN

Stack Overflow用户

发布于 2011-04-13 19:10:44

是。kill的名字有点不对--它可以发送任何信号。kill有许多用途,它们根本不会导致进程被终止!

票数 6
EN

Stack Overflow用户

发布于 2011-04-13 19:15:04

如果你想让一个应用程序从另一个程序中转储它的核心,几乎唯一的方法就是通过一个信号。SEGV可以很好地解决这个问题。或者,您可以将调试器挂接到程序上,然后冻结它并查看它的寄存器等,而不会终止它。

如果您想从应用程序内部转储核心,有更好的方法,比如通过assert()。

所以,不,向程序发送SEGV并不是特别错误。你也可以发送像SIGILL这样的非法指令,或者一个除以零的信号。一切都很好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5648172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档