簡體   English   中英

如果SIGSEGV(在C中)轉儲核心?

[英]Dump core if SIGSEGV (in C)?

當程序接收到SIGSEGV信號時,如何轉儲內核? (運行我的程序的服務器的權限非常有限,因此默認情況下禁用核心轉儲。)

我使用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);
}

除非有硬限制阻止您,否則可以使用setrlimit(RLIMIT_CORE, ...)來增加軟限制並啟用coredumps-這相當於在shell中運行ulimit -c

在linux上,通常可以執行以下操作:

$ ulimit -c unlimited

收到信號后,生成的核心文件將被寫入進程的當前工作目錄中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM