定製core dump 文件的文件名

Linux使用筆記: 定製core dump文件的文件名

在開發過程中,當一個Linux程序異常退出時,我們可以通過core文件來分析它異常的詳細原因。缺省情況下,Linux在程序異常時不產生core文件,要想讓程序異常退出時產生core dump文件,需要使用ulimit命令更改coredump的設置:

ulimit -c unlimited 

上面的命令表示在程序異常時產生core dump文件,並且不對core dump文件的大小進行限制。

上述設置只是使能了core dump功能,缺省情況下,內核在coredump時所產生的core文件放在與該程序相同的目錄中,並且文件名固定爲core。很顯然,如果有多個程序產生core文件,或者同一個程序多次崩潰,就會重複覆蓋同一個core文件。

我們通過修改kernel的參數,可以指定內核所生成的coredump文件的文件名。例如,Easwy使用下面的命令使kernel生成名字爲core.filename.pid格式的core dump文件:

echo 'core.%e.%p' > /proc/sys/kernel/core_pattern 

這樣配置後,產生的core文件中將帶有崩潰的程序名、以及它的進程ID。上面的%e%p會被替換成程序文件名以及進程ID。

可以在core_pattern模板中使用變量還很多,見下面的列表:

  • %% 單個%字符
  • %p 所dump進程的進程ID
  • %u 所dump進程的實際用戶ID
  • %g 所dump進程的實際組ID
  • %s 導致本次core dump的信號
  • %t core dump的時間 (由1970年1月1日計起的秒數)
  • %h 主機名
  • %e 程序文件名

如果在上述文件名中包含目錄分隔符”/“,那麼所生成的core文件將會被放到指定的目錄中。

需要說明的是,在內核中還有一個與coredump相關的設置,就是/proc/sys/kernel/core_uses_pid。如果這個文件的內容被配置成1,那麼即使core_pattern中沒有設置%p,最後生成的core dump文件名仍會加上進程ID。

對所生成的core dump進程分析,需要使用調試工具,例如GDB等。可以參見Easwy的其它文章。

原創文章,請閱讀頁腳的許可方式,轉載請註明:轉載自易水博客 [http://easwy.com/blog/ ]

本文鏈接地址: http://easwy.com/blog/archives/customize-filename-of-core-dump/

root權限不能vim編輯,echo進去,

/proc文件系統的內容是kernel映射出來的內存內容,並不在真實文件系統上


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章