Son Ubuntu'da (benim durumumda 12.04), "Segmentasyon hatası (çekirdek dökümü)" yazdırılabilir, ancak beklediğiniz yerde (örneğin yerel olarak derlenmiş bir program için) hiçbir çekirdek dosya üretilmez.
Bu, çekirdek dosya boyutu ulimit 0 ise (henüz yapmadıysanız ulimit -c unlimited
) olabilir - bu Ubuntu'daki varsayılan değerdir. Normalde bu, "(çekirdek dökümü)" 'nü bastırarak sizi hataya düşürür, ancak Ubuntu'da, çekirdek dosyaları Apport'a (Ubuntu'nun çökme raporlama sistemi) üzerinden gönderilir /proc/sys/kernel/core_pattern
ve bu yanıltıcı iletiye neden olur.
Apport, söz konusu programın çökmeleri bildirmesi gereken bir program olmadığını (bunun içinde olduğunu görebilirsiniz /var/log/apport.log
) keşfederse, cwd'ye bir çekirdek dosya koymak için varsayılan çekirdek davranışını simüle etmeye geri döner (bu kodda yapılır /usr/share/apport/apport
). Bu ulimit onurlandırmayı içerir, bu durumda hiçbir şey yapmaz. Ancak (sanırım), çekirdek söz konusu olduğunda, bir çekirdek dosyası oluşturuldu (ve ayırmak için pipetlendi), böylece "Segmentasyon hatası (çekirdek dökümü)" mesajı.
Nihayetinde PEBKAC ulimit kurmayı unuttuğu için, ama yanıltıcı mesaj bana bir süre delirdiğimi ve çekirdek dosyalarımı ne yediğini merak ettiğimi düşündürdü.
(Ayrıca, genel olarak, çekirdek (5) manuel sayfa - man 5 core
- çekirdek dosyanızın nerede bittiği ve yazılmamasının nedenleri için iyi bir referanstır.)