http://blog.sina.com.cn/s/blog_67c294ca01014a4v.html
什麼叫Core Dump ?
---------------------------
當一個進程要異常終止時,可以選擇把進程的用戶空間內存數據全部保存到磁盤上,文件名通常是core,這叫做Core Dump。
進程異常終止通常是因爲有Bug,比如非法內存訪問導致段錯誤,事後可以用調試器檢查core文件以查清錯誤原因,這叫做Post-mortemDebug。
一個進程允許產生多大的core文件取決於進程的Resource Limit(這個信息保存在PCB中)。默認是不允許產生core文件的,因爲core文件中可能包含用戶密碼等敏感信息,不安全。
在開發調試階段可以用ulimit命令改變這個限制,允許產生core文件。
開啓Core Dump並測試
---------------------------
1. ulimit命令改變Shell進程的Resource Limit,允許core文件最大爲1024K:
$ ulimit -c 1024
2. 寫一個死循環程序:
#include <unistd.h> int main(void) { while(1); return 0; }
3. 前臺運行這個程序,然後在終端鍵入Ctrl-C或Ctrl-\:
$ ./a.out(按Ctrl-C) $ ./a.out(按Ctrl-\)Quit (core dumped) $ ls -l core*-rw------- 1 akaedu akaedu 147456 2008-11-05 23:40 core
ulimit命令改變了Shell進程的Resource Limit,a.out進程的PCB由Shell進程複製而來,所以也具有和Shell進程相同的Resource Limit值,這樣就可以產生Core Dump了。