我尝试获取coredump,所以我使用:
ulimit -c unlimited
我在后台运行程序,并杀死了它:
kill -SEGV %1
但是我得到:
[1]+ Exit 1 ./Test
并且没有创建核心转储。
我对其他程序也做了同样的工作,但是它为什么不能全部使用?有人可以帮助我吗?
谢谢。 (GNU/Linux,Debian 2.6.26)
最佳答案
如果您的程序捕获SEGV信号并执行其他操作,则它将不会调用OS核心转储例程。检查它没有这样做。
在Linux下,出于安全原因,使用setuid,seteuid或其他一些参数更改其用户ID的进程将从转储核心中排除(请考虑:/bin/passwd在将/etc/shadow读入内存时转储核心)
您可以在更改UID之后通过调用prctl()在启用了更改其用户ID的Linux程序上重新启用转储核心
关于linux - 我没有获得所有过程的核心转储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2827520/