我没有得到所有过程的coredump

时间:2010-05-13 14:21:34

标签: linux coredump

我试图获得一个coredump,所以我使用:

ulimit -c unlimited

我在后台运行我的程序,然后我杀了它:

kill -SEGV %1

但我得到:

[1]+  Exit 1                  ./Test

并且没有创建coredump。 我对其他程序做了同样的事情并且它有效,所以为什么这不适用于所有?有人可以帮帮我吗?

感谢。 (GNU / Linux,Debian 2.6.26)

3 个答案:

答案 0 :(得分:2)

如果您的程序捕获SEGV信号并执行其他操作,则不会调用OS核心转储例程。检查它是不是那样做。

在Linux下,出于安全原因,使用setuid,seteuid或其他参数更改其用户ID的进程会从转储核心中排除(想想:/ bin / passwd在读取/ etc / shadow到内存时转储核心)

您可以在更改UID之后通过调用prctl()来更改其用户ID的Linux程序上重新启用转储核心

答案 1 :(得分:0)

此外,您可能想要检查您正在运行的程序是否未更改其工作目录(chdir()),因为它将在与您运行它的目录不同的目录中创建核心文件。

你也可以试试这个:

kill -ABRT pid 

答案 2 :(得分:0)

尝试(以root身份):

sysctl kernel.core_pattern=core

然后重复您的实验。在某些系统上,默认情况下变量设置为/dev/null

但是,如果你看到退出状态1,那么程序可能确实拦截了信号。