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");
}
}
在gdb中獲取你的核心文件的backtrace會很有用。 SIGTERM不會創建核心文件。 –
請注意,您當前的代碼在面對同時運行的多個副本時不具有彈性。固定的名字,特別是像'/ tmp'這樣的目錄是一個負擔。檢查你正在嘗試的一些操作的狀態也是一個好主意。 –
您應該調查哪個程序正在傾銷核心。嘗試第一個'文件核心'(它應該給你哪個程序轉儲該核心)。然後,假設它是'version.out',運行'gdb version.out core'(並鍵入'bt'並學習如何使用'gdb')。核心轉儲是某種不好的*症狀* –