每当我使用POSIX计时器(使用timer_create
和timer_settime
)并且我的代码中某处出现seg错误时,就不会生成核心转储文件。我用测试错误测试了这个(使用空指针)。
注释掉timer_settime
并运行到seg错误(空指针使用)确实会产生核心转储文件(因此有效地设置了ulimit),从而验证其他所有内容都是正确的。
timer_create
时将sigevent设置为NULL
,因此使用默认的SIGALRM
。
更多信息
我发现在某些系统(都是Ubuntu 12.04)上会生成核心文件DO。但不是在其他人身上(特别是在虚拟机中作为猜测运行时)。在所有平台上,不调用timer_settime并使用显式分段错误(使用空指针)会导致生成核心转储文件。我测试了2个裸机和2个VM(每个裸机1个)。在其中一个裸机上,运行VM并使用裸机中的程序没有生成核心转储,但是停止VM确实允许生成文件。所有物理都有8GB的RAM,程序Vm是几MB。