Leggi /usr/src/linux/Documentation/sysctl/kernel.txt.
core_pattern è utilizzato per specificare un nome di modello del file di dump principale.
- Se il primo carattere del pattern è un '|', il kernel tratterà il resto del pattern come un comando da eseguire. Il core dump verrà scritto nello standard input di quel programma invece che in un file.
Invece di scrivere il core dump su disco, il tuo sistema è configurato per inviarlo al abrt
(che significa:strumento di segnalazione automatica dei bug, non programma "abort"). Lo strumento di segnalazione automatica dei bug potrebbe non essere così documentato come dovrebbe essere...
In ogni caso, la risposta rapida è che dovresti essere in grado di trovare il tuo file principale in /var/cache/abrt
, dove abrt
lo memorizza dopo essere stato richiamato. Allo stesso modo, altri sistemi che utilizzano Apport potrebbero eliminare i core in /var/crash
e così via.
Sul recente Ubuntu (12.04 nel mio caso), è possibile che venga stampato "Errore di segmentazione (core dump)", ma non viene prodotto alcun file core dove ci si potrebbe aspettare (ad esempio per un programma compilato localmente).
Questo può accadere se hai una dimensione del file core ulimit di 0 (non hai fatto ulimit -c unlimited
) -- questa è l'impostazione predefinita su Ubuntu. Normalmente ciò sopprimerebbe il "(core dumped)", indicandoti il tuo errore, ma su Ubuntu, i corefile vengono reindirizzati ad Apport (il sistema di segnalazione degli arresti anomali di Ubuntu) tramite /proc/sys/kernel/core_pattern
, e questo sembra causare il messaggio fuorviante.
Se Apport scopre che il programma in questione non è quello per cui dovrebbe segnalare arresti anomali (che puoi vedere accadere in /var/log/apport.log
), ricorre alla simulazione del comportamento predefinito del kernel di inserire un file core nel cwd (questo viene fatto nello script /usr/share/apport/apport
). Ciò include onorare ulimit, nel qual caso non fa nulla. Ma (presumo) per quanto riguarda il kernel, è stato generato un corefile (e reindirizzato ad apport), da qui il messaggio "Errore di segmentazione (core dumped)".
Alla fine PEBKAC per aver dimenticato di impostare ulimit, ma il messaggio fuorviante mi ha fatto pensare che stavo impazzendo per un po', chiedendomi cosa stesse mangiando i miei corefile.
(Inoltre, in generale, la pagina man core(5) -- man 5 core
-- è un buon riferimento per sapere dove va a finire il tuo file principale e perché potrebbe non essere scritto.)