2009-11-09 6 views
2

Étant donné la configuration dans /proc/sys/kernel/core_pattern définie sur /cores/core.%e.%p, les vidages de mémoire centrale sont nommés selon le modèle, cependant pour les processus exécutant des exécutables avec des noms longs, par exemple. SampleCrashApplication, le fichier core généré contiendra un nom d'exécutable tronqué: /cores/core.SampleCrashAppl.9933Le nom du fichier de vidage du noyau est tronqué

Qu'est-ce qui cause ce problème? La page man core ne parle que de la taille maximale du fichier de base résultant étant 128 (64 pour les noyaux avant 2.6.19)

Répondre

3

Le code pour cela peut être trouvé dans le fichier exec here.

Le code va copier le corename sur la base du motif jusqu'à la première pourcentage (donnant/carottes/noyau.). Au pourcentage, il va augmenter et traiter le 'e'. Le code pour le traitement de la partie « e » imprime le motif en utilisant snprintf sur la base de la structure de current-> comm.

C'est le nom de l'exécutable (chemin hors) tronquées à la valeur TASK_COMM_LEN. Étant donné que cela est défini comme 16 caractères (au moins dans le noyau je trouve) puis SampleCrashApplication est tronqué à 15 caractères + 1 (1 pour l'octet nul à la fin) ce qui explique pourquoi vous obtenez votre nom de fichier core tronqué. À la raison pour laquelle cette structure tronque le nom TASK_COMM_LEN, c'est une question plus profonde, mais c'est quelque chose d'interne au noyau et il y a une discussion here.

Questions connexes