2014-04-10 73 views
2

我有下面顯示的C++函數,它可以工作,但它在Linux中創建核心轉儲文件。有沒有辦法阻止它創建核心轉儲文件?在Linux的fork和kill後停止創建核心轉儲文件

PS:「version.out」有時會掛起,所以我正在創建一個新進程並在1秒後將其殺死,以避免程序掛起並稍後從/ tmp/version中獲取輸出。

void bVersion(void) 
{ 
    pid_t pid; 
    pid=fork(); 
    if (pid == 0) 
    { 
     system("version.out > /tmp/version"); 
    } 
    else 
    { 
     // wait for 1 second 
     sleep(1); 
     kill(pid, SIGTERM); 
     mverDir("/tmp/qnbversion"); 
     system("rm /tmp/qnbversion"); 
    } 
} 
+2

在gdb中獲取你的核心文件的backtrace會很有用。 SIGTERM不會創建核心文件。 –

+1

請注意,您當前的代碼在面對同時運行的多個副本時不具有彈性。固定的名字,特別是像'/ tmp'這樣的目錄是一個負擔。檢查你正在嘗試的一些操作的狀態也是一個好主意。 –

+0

您應該調查哪個程序正在傾銷核心。嘗試第一個'文件核心'(它應該給你哪個程序轉儲該核心)。然後,假設它是'version.out',運行'gdb version.out core'(並鍵入'bt'並學習如何使用'gdb')。核心轉儲是某種不好的*症狀* –

回答

2

setrlimit函數可用於防止當與設置爲零RLIMIT_CORE標誌和限制值稱爲核心轉儲。