當我的程序收到SIGSEGV信號時,如何轉儲內核? (運行我的程序的服務器的權限非常有限,因此默認禁用核心轉儲。)轉儲核心如果SIGSEGV(在C)?
我已經使用gcore編寫了以下內容,但我想使用C函數。我能不知何故抓住核心並將它寫入某個文件夾?
void segfaulthandler(int parameter)
{
char gcore[50];
sprintf(gcore, "gcore -s -c \"core\" %u", getpid());
system(gcore);
exit(1);
}
int main(void)
{
signal(SIGSEGV, segfaulthandler);
}
核心文件將根據當前工作目錄創建,使用'/ proc/sys/kernel/core_pattern'的值 - 默認爲「core」 – Erik
另外,'/ proc/sys/kernel/core_uses_pid '可以設置爲1,在這種情況下.pid被附加到核心文件名稱(除非模式包含%p) – Erik