是否可以转储核心但不退出流程?

时间:2015-06-18 14:45:58

标签: c++ c ubuntu core

我希望能够生成核心转储,但之后不会退出该进程。我不需要它继续执行,只是不会死。这是一个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);
}

在转储核心后,我有什么办法可以让流程退出吗?

提前感谢一大堆!

1 个答案:

答案 0 :(得分:1)

您也可以使用gcore执行此操作:

  

使用进程ID pid生成正在运行的程序的核心转储。生成的文件等同于内核生成的核心文件,就好像进程崩溃一样(如果" ulimit -c"用于设置适当的核心转储限制)。与崩溃后不同,在gcore之后程序仍在运行而没有任何变化。