我希望能够生成核心转储,但之后不会退出该进程。我不需要它继续执行,只是不会死。这是一个C ++ Ubuntu进程。
我相信我以非常标准的方式转储核心:我通过使用signal()设置信号处理程序来捕获有问题的信号,我通过setrlimit()设置核心大小限制然后我提示核心dump with signal()和raise():
signal(SIGSEGV, OnPosixSignal);
...
void OnPosixSignal(int iSignal)
{
struct rlimit CoreLimit;
CoreLimit.rlim_cur = RLIM_INFINITY;
CoreLimit.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &CoreLimit);
signal(iSignal, SIG_DFL);
raise(iSignal);
}
在转储核心后,我有什么办法可以让流程退出吗?
提前感谢一大堆!
答案 0 :(得分:1)
您也可以使用gcore
执行此操作:
使用进程ID pid生成正在运行的程序的核心转储。生成的文件等同于内核生成的核心文件,就好像进程崩溃一样(如果" ulimit -c"用于设置适当的核心转储限制)。与崩溃后不同,在gcore之后程序仍在运行而没有任何变化。