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> ».