Provided by: manpages-fr_3.65d1p1-1_all bug

NOM

       core - Fichier image de la mémoire

DESCRIPTION

       L'action  par  défaut  de certains signaux et de faire se terminer un processus et de produire un fichier
       image mémoire (« core dump file »). C'est un fichier disque qui contient l'image mémoire du processus  au
       moment  où  il  s'est terminé. Cette image peut être utilisé dans un débogueur (par exemple, gdb(1)) pour
       étudier l'état du programme au moment où il a été terminé. Une liste des signaux provoquant  la  création
       de cette image mémoire se trouve dans signal(7).

       Un processus peut définir sa propre limite de ressource RLIMIT_CORE afin de Définir une limite supérieure
       à  la  taille  du  fichier  image  mémoire  qui sera créé s'il reçoit un signal « core dump » ; consultez
       getrlimit(2) pour davantage d'informations.

       Il y a diverses circonstances pour  lesquelles  un  fichier  image  mémoire  (« core  dump »)  n'est  pas
       produit :

       *  Le  processus  ne  possède  pas les droits pour écrire le fichier image de la mémoire. (Par défaut, le
          fichier image de la mémoire s'appelle core, il est créé dans le répertoire de travail en  cours.  Voir
          ci-dessous pour davantage d'informations sur les règles de nommage). L'écriture du fichier image de la
          mémoire  échouera  si le répertoire dans lequel il devrait être écrit n'est pas accessible en écriture
          ou n'est pas un fichier normal (par exemple, si c'est un répertoire ou un lien symbolique).

       *  Un fichier (régulier et dans lequel on peut écrire) avec le même nom que celui qui serait utilisé pour
          l'image de la mémoire existe déjà, mais il y a plusieurs liens physiques vers ce fichier.

       *  Le système de fichiers dans lequel serait écrit le fichier image de la mémoire est  plein  ou  il  n'a
          plus  d'inœud,  ou il est monté en lecture seule, ou l'utilisateur a atteint son quota pour le système
          de fichiers.

       *  Le répertoire dans lequel le fichier image de la mémoire doit être créé n'existe pas.

       *  Les limites de ressources RLIMIT_CORE (taille des  fichiers  « core »)  ou  RLIMIT_FSIZE  (taille  des
          fichiers)  pour  un  processus ont une valeur nulle ; consultez getrlimit(2) et la documentation de la
          commande ulimit de l'interpréteur de commande (limit dans csh(1)).

       *  Le binaire en cours d'exécution par le processus n'a pas les droits en écriture activés.

       *  Le processus exécute un programme set-user-ID (respectivement, set-group-ID) qui  est  détenu  par  un
          utilisateur  (respectivement,  un  groupe)  autre  que l'identifiant d'utilisateur (respectivement, de
          groupe)  réel  du  processus.  (Consultez   cependant   la   description   de   l'opération   prctl(2)
          PR_SET_DUMPABLE, et la description du fichier /proc/sys/fs/suid_dumpable dans proc(5)).

       *  (Depuis Linux 3.7) Le noyau était compilé sans l'option CONFIG_COREDUMP.

       De  plus,  le  fichier image peut exclure des portions de l'espace d'adressage du processus si l'attribut
       madvise(2) MADV_DONTDUMP est utilisé.

   Nommage des fichiers image mémoire
       Par défaut, un fichier image de la mémoire s'appelle core, mais le fichier  /proc/sys/kernel/core_pattern
       (depuis  Linux  2.6 et 2.4.21) peut être configuré de manière à définir un motif qui sera utilisé pour le
       nommage des fichiers image de la mémoire. Le motif peut contenir des spécificateurs % qui sont substitués
       par les valeurs suivantes lorsqu'une image de la mémoire est créée :

           %%  Caractère % unique
           %c  Limite de ressource souple de la taille des fichiers core lors du plantage d'un processus (depuis
               Linux 2.6.24)
           %d  mode vidage (« dump mode »)—identique à la valeur renvoyée par prctl(2)  PR_GET_DUMPABLE  (depuis
               Linux 3.7)
           %e  Nom du fichier exécutable (sans le chemin)
           %E  chemin  d'accès  de  l'exécutable,  où  les  barres obliques « / » sont remplacées par des points
               d'exclamation « ! » (depuis Linux 3.0).
           %g  GID (numérique) réel du processus « dumpé »
           %h  Nom d'hôte (identique à nodename tel que le renvoie uname(2))
           %p  PID du processus vidé, tel qu'il est vu dans l'espace  de  noms  des  processus  dans  lequel  le
               processus se trouve
           %P  PID  du  processus  vidé,  tel  qu'il est vu dans l'espace des noms des processus initial (depuis
               Linux 3.12)
           %s  Numéro du signal ayant provoqué le « dump »
           %t  Heure du « dump », exprimé en secondes depuis l'époque, 1er janvier 1970 à 00:00:00 (UTC)
           %u  UID (numérique) réel du processus « dumpé »

       Un % isolé à la fin du motif est éliminé du nom de fichier de l'image mémoire, de même un  %  suivi  d'un
       caractère  autre  que  ceux  de  la  liste ci-dessus. Tous les autres caractères du motif conservent leur
       valeur littérale dans le nom de fichier de l'image mémoire. Un motif peut contenir des  caractère  « / »,
       ils  sont  interprétés  comme  des  délimiteurs pour les noms de répertoires. La taille maximum du nom de
       fichier de l'image mémoire résultant est de 128 octets (64 octets dans les noyaux antérieurs au  2.6.19).
       La  valeur  par défaut de ce nom de fichier est « core ». Afin d'assurer une compatibilité ascendante, si
       /proc/sys/kernel/core_pattern  ne  contient  pas  « %p »  et  si   /proc/sys/kernel/core_uses_pid   (voir
       ci-dessous) est non-nul, alors .PID est ajouté au nom de fichier de l'image mémoire.

       Depuis  la  version 2.4,  Linux procure aussi une méthode plus primitive pour contrôler le nom du fichier
       image de la mémoire. Si le fichier /proc/sys/kernel/core_uses_pid contient la valeur 0, alors le  fichier
       image  de la mémoire est tout simplement appelé core. Si ce fichier contient une valeur non nulle, alors,
       le fichier image de la mémoire intégrera dans son nom le numéro d'identification  du  processus  sous  la
       forme core.PID.

       A  partir  de  Linux 3.6,  si /proc/sys/fs/suid_dumpable a pour valeur 2 («suidsafe»), le motif doit être
       soit un chemin absolu (commençant par le caractère '/'), soit un tube, comme indiqué plus bas.

   Tuber les vidages mémoire vers un programme
       Depuis le noyau 2.6.19, Linux gère une syntaxe alternative pour le fichier /proc/sys/kernel/core_pattern.
       Si le premier caractère de ce fichier est le symbole du tube (|), le reste de  la  ligne  est  interprété
       comme  étant  un  programme  à  exécuter.  Le  vidage  mémoire  est alors fourni comme entrée standard au
       programme plutôt que d'être écrit dans un fichier sur le disque. Veuillez noter les points suivants :

       *  Le programme doit être indiqué avec un chemin d'accès absolu (ou un  chemin  relatif  par  rapport  au
          répertoire racine, /) et doit immédiatement suivre le caractère « | ».

       *  Le processus créé pour exécuter le programme s'exécute avec les utilisateur et groupe root.

       *  Des  paramètre  en  ligne de commande peuvent être fournis au programme (depuis Linux 2.6.24), séparés
          par des espaces (jusqu'à une longueur de ligne de 128 octets).

       *  Les paramètres de la ligne de commande peuvent inclure tout spécificateur %  indiqué  plus  haut.  Par
          exemple, pour passer le PID du processus à vider, indiquez %p dans un paramètre.

   Contrôler quelles projections seront écrites dans le vidage mémoire
       Depuis  le  noyau  2.6.23, le fichier /proc/PID/coredump_filter spécifique à Linux peut être utilisé pour
       contrôler quels segments de mémoire seront écrits dans le fichier d'image de mémoire dans le  cas  où  le
       vidage mémoire est effectué pour le processus avec le PID correspondant.

       La  valeur  dans ce fichier est un masque de bits des types de projection mémoire (consultez mmap(2)). Si
       un bit est positionné dans le masque,  les  projections  mémoire  du  type  correspondant  sont  vidées ;
       autrement, elles ne le sont pas. Les bits dans ce fichier ont les significations suivantes :

           bit 0  Vider les projections privées anonymes.
           bit 1  Vider les projections partagées anonymes.
           bit 2  Vider les projections privées sauvegardées sur fichier
           bit 3  Vider les projections partagées sauvegardées sur fichier
           bit 4 (depuis Linux 2.6.24)
                  Vider les en-têtes ELF.
           bit 5 (depuis Linux 2.6.28)
                  Vider les pages privées énormes.
           bit 6 (depuis Linux 2.6.28)
                  Vider les pages partagées énormes.

       Par  défaut,  les  bits  suivants  sont  positionnés :  0,  1,  4  (si l'option de configuration du noyau
       CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS est activée)  et  5.  La  valeur  de  ce  fichier  est  affichée  en
       hexadécimal (la valeur par défaut affichée est donc 33).

       Les  pages  d'entrées-sorties projetées en mémoire telles que les tampons de trame ne sont jamais vidées,
       et les pages DSO virtuelles sont toujours vidées, quelle que soit la valeur de coredump_filter.

       Un processus fils créé avec fork(2) hérite de la valeur de coredump_filter de son  père ;  la  valeur  de
       coredump_filter est préservée au travers d'un execve(2).

       Il  peut  être  utile  de définir coredump_filter dans le shell parent avant d'exécuter le programme, par
       exemple :

           $ echo 0x7 > /proc/self/coredump_filter
           $ ./un_programme

       Ce fichier n'existe que si le noyau a été compilé avec l'option de configuration CONFIG_ELF_CORE.

NOTES

       La commande gdb(1) gcore peut être utilisée pour obtenir  une  image  mémoire  d'un  processus  en  cours
       d'exécution.

       Dans  Linux jusqu’à la version 2.6.27 comprise, si une tâche multiprocessus (« multithreaded ») (ou, plus
       précisément, un processus qui partage son espace mémoire avec un  autre  processus  en  étant  créé  avec
       l'indicateur  CLONE_VM  de  clone(2))  crée une image mémoire, alors l'identifiant du processus (PID) est
       toujours ajouté au nom du fichier image de la mémoire, à moins que l'identifiant du processus fasse  déjà
       partie  du  nom  de  fichier par l'intermédiaire d'une spécification %p de /proc/sys/kernel/core_pattern.
       (C'est principalement utile  lors  de  l'utilisation  de  l'implémentation  obsolète  LinuxThreads,  pour
       laquelle chaque thread a son propre PID.)

EXEMPLE

       Le programme ci-dessous montre l'utilisation de la syntaxe tube du fichier /proc/sys/kernel/core_pattern.
       La  session  shell  suivante  montre l'utilisation de ce programme (compilé pour créé un exécutable nommé
       core_pattern_pipe_test) :

           $ cc -o core_pattern_pipe_test core_pattern_pipe_test.c
           $ su
           Password:
           # echo "|$PWD/core_pattern_pipe_test %p UID=%u GID=%g sig=%s" > \
           /proc/sys/kernel/core_pattern
           # exit
           $ sleep 100
           ^\                     # type control-backslash
           Quit (core dumped)
           $ cat core.info
           argc=5
           argc[0]=</home/mtk/core_pattern_pipe_test>
           argc[1]=<20575>
           argc[2]=<UID=1000>
           argc[3]=<GID=100>
           argc[4]=<sig=3>
           Total bytes in core dump: 282624

   Source du programme

       /* core_pattern_pipe_test.c */

       #define _GNU_SOURCE
       #include <sys/stat.h>
       #include <fcntl.h>
       #include <limits.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       #define BUF_SIZE 1024

       int
       main(int argc, char *argv[])
       {
           int tot, j;
           ssize_t nread;
           char buf[BUF_SIZE];
           FILE *fp;
           char cwd[PATH_MAX];

           /* Change our current working directory to that of the
              crashing process */

           snprintf(cwd, PATH_MAX, "/proc/%s/cwd", argv[1]);
           chdir(cwd);

           /* Write output to file "core.info" in that directory */

           fp = fopen("core.info", "w+");
           if (fp == NULL)
               exit(EXIT_FAILURE);

           /* Display command-line arguments given to core_pattern
              pipe program */

           fprintf(fp, "argc=%d\n", argc);
           for (j = 0; j < argc; j++)
               fprintf(fp, "argc[%d]=<%s>\n", j, argv[j]);

           /* Count bytes in standard input (the core dump) */

           tot = 0;
           while ((nread = read(STDIN_FILENO, buf, BUF_SIZE)) > 0)
               tot += nread;
           fprintf(fp, "Total bytes in core dump: %d\n", tot);

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       bash(1), gdb(1), getrlimit(2), mmap(2), prctl(2), sigaction(2), elf(5), proc(5), pthreads(7), signal(7)

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions    pour    signaler    des    anomalies    peuvent     être     trouvées     à     l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Jean-Luc Coulon et l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».

Linux                                             14 mars 2014                                           CORE(5)