核心轉儲core dumped
概念:當⼀個進程要異常終止時,可以選擇把進程的用戶空間內存數據全部保存到磁盤上,文件名通常是core,這叫做Core Dump。也叫核心轉儲,幫助開發者進行調試,在程序崩潰時把內存數據dump到硬盤上,讓gdb識別
。
一個進程允許產生多大的core文件取決於進程的 Resource Limit(這個信息保存在PCB中)。默認是不允許產生core文件的,因爲core文件中可能包含用戶密碼等敏感信息,不安全。
用ulimit -a命令查看系統中的軟硬件資源限制
其中core file size = 0,也就印證了上邊的說法.
上邊還有其他資源的限制,比如:
硬盤swap分區:用於內存數據換入換出的分區
max locked memory:不允許換出的內存數據,就被鎖住
但我們在開發調試階段可以用ulimit命令改變這個限制, 允許產生core文件:ulimit -c 1024,允許core⽂件最大爲1024K
更改後再次運行程序就可以看到core文件,其文件名後邊的數字就是進程的pid號。
進程異常終止通常是因爲有 Bug,比如非法內存訪問導致段錯誤,事後可以用調試器檢查core文件以查清錯誤原因,這叫做 Post-mortem Debug(事後調試)。
如圖,輸入命令就可以直接定位到是SIGQUIT信號引起的進程退出。