Lisez /usr/src/linux/Documentation/sysctl/kernel.txt.
core_pattern est utilisé pour spécifier un nom de modèle de fichier de vidage principal.
- Si le premier caractère du motif est un '|', le noyau traitera le reste du motif comme une commande à exécuter. Le vidage mémoire sera écrit dans l'entrée standard de ce programme au lieu d'un fichier.
Au lieu d'écrire le vidage mémoire sur le disque, votre système est configuré pour l'envoyer au abrt
(c'est-à-dire :outil de rapport de bogue automatisé, pas programme "abandon") à la place. L'outil de rapport de bogue automatisé n'est peut-être pas aussi documenté qu'il devrait l'être...
Dans tous les cas, la réponse rapide est que vous devriez pouvoir trouver votre fichier core dans /var/cache/abrt
, où abrt
le stocke après avoir été invoqué. De même, d'autres systèmes utilisant Apport peuvent écumer les cœurs dans /var/crash
, et ainsi de suite.
Sur Ubuntu récent (12.04 dans mon cas), il est possible que "Segmentation fault (core dumped)" soit imprimé, mais aucun fichier core n'est produit là où vous pourriez vous y attendre (par exemple pour un programme compilé localement).
Cela peut arriver si vous avez une taille de fichier core ulimit de 0 (vous n'avez pas fait ulimit -c unlimited
) -- c'est la valeur par défaut sur Ubuntu. Normalement, cela supprimerait le "(core dumped)", vous indiquant votre erreur, mais sur Ubuntu, les corefiles sont redirigés vers Apport (le système de rapport de plantage d'Ubuntu) via /proc/sys/kernel/core_pattern
, et cela semble provoquer le message trompeur.
Si Apport découvre que le programme en question n'en est pas un, il devrait signaler les plantages (ce que vous pouvez voir se produire dans /var/log/apport.log
), il revient à simuler le comportement par défaut du noyau consistant à placer un fichier core dans le cwd (cela se fait dans le script /usr/share/apport/apport
). Cela inclut le respect de ulimit, auquel cas il ne fait rien. Mais (je suppose) en ce qui concerne le noyau, un corefile a été généré (et redirigé vers apport), d'où le message "Segmentation fault (core dumped)".
En fin de compte, PEBKAC pour avoir oublié de définir ulimit, mais le message trompeur m'a fait penser que je devenais fou pendant un moment, me demandant ce qui mangeait mes fichiers core.
(Aussi, en général, la page de manuel core(5) -- man 5 core
-- est une bonne référence pour savoir où se trouve votre fichier principal et les raisons pour lesquelles il pourrait ne pas être écrit.)