2011-09-19 20 views
2

如何在linux中使用C++代碼設置核心文件名?如何使用C++代碼設置核心文件名?

關於二進制崩潰的Linux轉儲核心文件,是否可以設置核心轉儲文件名?

+1

你是什麼意思的「核心文件名」? –

+0

什麼現在..? –

+0

抱歉我的壞對我來說核心意味着Linux崩潰的核心文件。更新了問題。 –

回答

6

在我的系統(帶有內核2.6.32的Ubuntu 10.04)中,man core沒有指出可以逐個進程選擇命名。在可以,但是,將全系統的改變通過修改/proc/sys/kernel/core_pattern

默認情況下,一個核心轉儲文件被命名爲核心,但 /proc/sys/kernel/core_pattern文件(因爲Linux 2.6和2.4.21)可以 設爲定義一個用於命名核心轉儲文件的模板。所述 模板可以包含其由 以下值創建一個核心文件時子stituted%指示符:

%% a single % character 
    %p PID of dumped process 
    %u (numeric) real UID of dumped process 
    %g (numeric) real GID of dumped process 
    %s number of signal causing dump 
    %t time of dump, expressed as seconds since the Epoch (00:00h, 1 Jan 1970, UTC) 
    %h hostname (same as nodename returned by uname(2)) 
    %e executable filename (without path prefix) 
    %c core file size soft resource limit of crashing process (since Linux 2.6.24) 

在模板的端部的單個%從芯 文件名下降,由於是%後面跟除上面列出的字符以外的任何字符 的組合。模板 中的所有其他字符都成爲核心文件名的文字部分。模板 可能包含'/'字符,它們被解釋爲 目錄名稱的分隔符。生成的核心文件名 的最大大小爲128字節(在2.6.19之前的內核中爲64字節)。此文件中的默認值 是「核心」。爲了向後兼容,如果 /proc/sys/kernel/core_pattern不包括"%p"/proc/sys/kernel/core_uses_pid(見下文)非零,那麼.PID 將被附加到核心文件名。

+0

謝謝,所以我不能使用我的代碼爲我的應用程序設置名稱。 –

+0

@VivekGoel valgrind以某種方式設法命名其核心「vgcore。」,而不考慮核心模式sysctl。 – fstd

4

我相信this page描述了你一般在尋找什麼。你可以做的是設置核心文件是通過改變proc文件系統中的魔法入門命名方式:

echo "pattern" > /proc/sys/kernel/core_pattern 

其中模式printf式的模式字符串,記錄了鏈接的頁面上。從C++執行此操作只需使用正常機制打開並寫入該文件即可。但是,您必須是root才能寫入'core_pattern'。

相關問題