Man page - core(5)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr pl ja ruManual
core
NOMDESCRIPTION
Nommage des fichiers image de la mémoire
Tuber les vidages mémoire vers un programme
/proc/sys/kernel/core_pipe_limit
ContrÎler quelles projections seront écrites dans le vidage mémoire
Vidages mémoire et systemd
NOTES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION
NOM
core â Fichier image de la mĂ©moire
DESCRIPTION
Lâaction par dĂ©faut de certains signaux consiste Ă faire se terminer un processus et Ă produire un fichier image de la mĂ©moire (« core dump file »). Câest un fichier qui contient lâimage mĂ©moire du processus au moment oĂč il sâest terminĂ©. Cette image peut ĂȘtre utilisĂ©e dans un dĂ©bogueur (par exemple, gdb (1)) pour Ă©tudier lâĂ©tat du programme au moment oĂč il sâest 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 souple RLIMIT_CORE afin de dĂ©finir une limite supĂ©rieure Ă la taille du fichier image de la 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 dans lesquelles un fichier image de la 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 ou core.pid , oĂč pid est lâidentifiant du processus qui a gĂ©nĂ©rĂ© une image de la mĂ©moire. 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 si un fichier avec le mĂȘme nom existe et nâest pas accessible en Ă©criture ou nâest pas un fichier ordinaire (par exemple, si câest un rĂ©pertoire ou un lien symbolique). |
||
|
- |
Un fichier (ordinaire et accessible en Ă©criture) 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, il nâa plus dâinĆud, 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 sont dĂ©finies Ă zĂ©ro ; consultez getrlimit (2) et la documentation de la commande ulimit de lâinterprĂ©teur de commande ( limit dans csh (1)). RLIMIT_CORE sera cependant ignorĂ©e si le systĂšme est configurĂ© pour tuber les vidages mĂ©moire vers un programme. |
||
|
- |
Le binaire actuellement exĂ©cutĂ© par le processus nâest pas accessible en lecture. Il sâagit dâune mesure de sĂ©curitĂ© pour sâassurer quâun exĂ©cutable dont le contenu nâest pas accessible en lecture ne produira pas de vidage mĂ©moire â éventuellement lisible â contenant une image de lâexĂ©cutable. |
||
|
- |
Le processus exĂ©cute un programme set-user-ID (ou set-group-ID) dont le propriĂ©taire (ou le groupe) est diffĂ©rent de lâidentifiant dâutilisateur (ou de groupe) rĂ©el du processus, ou le processus exĂ©cute un programme qui possĂšde des capacitĂ©s de fichier (voir capabilities (7)). Consultez cependant la description de lâopĂ©ration PR_SET_DUMPABLE de prctl (2), et la description du fichier /proc/sys/fs/suid_dumpable dans proc (5). |
||
|
- |
/proc/sys/kernel/core_pattern est vide et /proc/sys/kernel/core_uses_pid contient la valeur 0 (ces fichiers sont dĂ©crits plus loin). Notez que si /proc/sys/kernel/core_pattern est vide et si /proc/sys/kernel/core_uses_pid contient la valeur 1 , les fichiers image de la mĂ©moire possĂ©deront des noms de la forme .pid , et que ces fichiers sont cachĂ©s, Ă moins dâutiliser lâoption -a de ls (1). |
||
|
- |
(Depuis Linux 3.7) Le noyau a Ă©tĂ© compilĂ© sans lâoption CONFIG_COREDUMP . |
De plus, le vidage mĂ©moire peut exclure des portions de lâespace dâadressage du processus si lâattribut MADV_DONTDUMP de madvise (2) est utilisĂ©.
Sur les systĂšmes qui utilisent systemd (1) comme cadriciel pour init , les vidages mĂ©moire peuvent ĂȘtre Ă©crits Ă un emplacement dĂ©terminĂ© par systemd (1). Voir plus loin pour plus de dĂ©tails.
Nommage des fichiers image de la 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 remplacĂ©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 du fichier image de la mĂ©moire créé lors du plantage dâun processus (depuis Linux 2.6.24). |
||
|
%d |
Mode vidage (« dump mode ») â identique Ă la valeur renvoyĂ©e par PR_GET_DUMPABLE de prctl (2) (depuis Linux 3.7). |
||
|
%e |
La valeur de comm du processus ou du thread, qui correspond en gĂ©nĂ©ral au nom de lâexĂ©cutable (sans le chemin et tronquĂ© Ă un maximum de 15 caractĂšres), mais qui peut avoir Ă©tĂ© modifiĂ©e en quelque chose de diffĂ©rent ; voir les explications Ă propos de /proc/ pid /comm et /proc/ pid /task/ tid /comm dans proc (5). |
||
|
%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 dont lâimage mĂ©moire a Ă©tĂ© vidĂ©e. |
||
|
%h |
Nom dâhĂŽte (identique Ă nodename renvoyĂ© par uname (2)). |
||
|
%i |
TID du thread qui a dĂ©clenchĂ© le vidage mĂ©moire, tel quâil est vu dans lâespace de noms du PID dans lequel le thread se trouve (depuis Linux 3.18). |
||
|
%I |
TID du thread qui a dĂ©clenchĂ© le vidage mĂ©moire, tel quâil est vu dans lâespace de noms du PID initial (depuis Linux 3.18). |
||
|
%p |
PID du processus dont lâimage mĂ©moire a Ă©tĂ© vidĂ©e, tel quâil est vu dans lâespace de noms du PID dans lequel le processus se trouve. |
||
|
%P |
PID du processus dont lâimage mĂ©moire a Ă©tĂ© vidĂ©e, tel quâil est vu dans lâespace des noms du PID initial (depuis Linux 3.12). |
||
|
%s |
Numéro du signal ayant provoqué le vidage mémoire |
||
|
%t |
Heure du vidage mĂ©moire exprimĂ©e en secondes depuis lâĂpoque, 1er janvier 1970 Ă 00:00:00 +0000 (UTC). |
||
|
%u |
UID numérique réel du processus « vidé ». |
Un % isolĂ© Ă la fin du motif est Ă©liminĂ© du nom de fichier de lâimage mĂ©moire, et il en sera de mĂȘme pour 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Ăšres « / », ils sont interprĂ©tĂ©s comme des dĂ©limiteurs pour les noms de rĂ©pertoire. La taille maximale du nom de fichier de lâimage mĂ©moire rĂ©sultant est de 128 octets (64 octets avant Linux 2.6.19). La valeur par dĂ©faut de ce nom de fichier est « core ». Afin dâassurer une rĂ©trocompatibilitĂ©, si /proc/sys/kernel/core_pattern ne contient pas « %p » et si /proc/sys/kernel/core_uses_pid (voir ci-dessous) est diffĂ©rent de zĂ©ro, « .PID » est ajoutĂ© au nom de fichier de lâimage mĂ©moire.
Les chemins sont interprĂ©tĂ©s en tenant compte des paramĂštres actifs pour le processus qui a plantĂ©. Ces paramĂštres comprennent lâespace de noms montage du processus qui a plantĂ© (voir mount_namespaces (7)), son rĂ©pertoire de travail actuel (dĂ©terminĂ© Ă lâaide de getcwd (2)) et son rĂ©pertoire racine (voir chroot (2)).
Depuis Linux 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, le fichier image de la mĂ©moire est tout simplement appelĂ© core . Si ce fichier contient une valeur diffĂ©rente de zĂ©ro, le fichier image de la mĂ©moire intĂ©grera dans son nom le numĂ©ro dâidentification du processus sous la forme core.PID .
Ă 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 prend en charge 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 une ligne de commande pour un programme de lâespace utilisateur (ou un script) Ă exĂ©cuter.
Depuis Linux 5.3.0, le modĂšle de tube est divisĂ© en tenant compte des espaces en une liste dâarguments avant lâinterprĂ©tation des paramĂštres du modĂšle. Avec les noyaux plus anciens, les paramĂštres du modĂšle sont interprĂ©tĂ©s en premier et la chaĂźne rĂ©sultante est divisĂ©e en tenant compte des espaces en une liste dâarguments. Cela signifie quâavec les noyaux plus anciens, les noms dâexĂ©cutable ajoutĂ©s par les paramĂštres de modĂšle %e et %E pouvaient ĂȘtre divisĂ©s en plusieurs arguments. Le gestionnaire de vidage mĂ©moire doit donc dĂ©finir le dernier argument avec les noms dâexĂ©cutable et sâassurer de « recoller » toutes les parties du nom de lâexĂ©cutable en tenant compte des espaces. Les noms dâexĂ©cutable qui contiennent plusieurs espaces ne sont pas correctement reprĂ©sentĂ©s dans les noyaux plus anciens, et dans ce cas, le gestionnaire de vidage mĂ©moire devra utiliser des mĂ©canismes permettant de dĂ©terminer le nom de lâexĂ©cutable.
Au lieu dâĂȘtre Ă©crit dans un fichier, le vidage mĂ©moire est envoyĂ© sur lâentrĂ©e standard du programme. Notez 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 « | ». |
||
|
- |
Les arguments de la ligne de commande peuvent inclure tout spécificateur % indiqué plus haut. Par exemple, pour transmettre le PID du processus vidé, indiquez %p dans un argument. |
||
|
- |
Le processus créé pour exĂ©cuter le programme sâexĂ©cute avec les utilisateur et groupe root . |
||
|
- |
LâexĂ©cution en tant que root ne permet pas de contournement de sĂ©curitĂ© exceptionnel. Ă ce titre, les LSM (comme SELinux) sont toujours actifs et peuvent empĂȘcher le gestionnaire dâaccĂ©der aux dĂ©tails du processus ayant plantĂ© Ă lâaide de /proc/ pid. |
||
|
- |
Le nom de chemin du programme est interprĂ©tĂ© en respectant lâespace de noms montage initial, car il est toujours exĂ©cutĂ© dans ce contexte. Il nâest pas affectĂ© par les paramĂštres du processus ayant plantĂ© (par exemple le rĂ©pertoire racine, lâespace de noms montage et le rĂ©pertoire de travail actuel). |
||
|
- |
Le processus sâexĂ©cute dans les espaces de noms initiaux (PID, montage, utilisateur, etc.) et non dans les espaces de noms du processus ayant plantĂ©. On peut utiliser des spĂ©cificateurs comme %P pour trouver le rĂ©pertoire /proc/ pid correct et sonder/entrer les espaces de noms du processus ayant plantĂ© si nĂ©cessaire. |
||
|
- |
Le processus dĂ©marre avec son rĂ©pertoire de travail courant comme rĂ©pertoire racine. Il est cependant possible de passer au rĂ©pertoire de travail du processus de vidage en utilisant la valeur fournie par le spĂ©cificateur %P pour passer Ă lâemplacement du processus de vidage Ă lâaide de /proc/ pid /cwd . |
||
|
- |
Depuis Linux 2.6.24, il est possible de fournir au programme des arguments sĂ©parĂ©s par des espaces dans la ligne de commande (jusquâĂ une longueur de ligne de 128 octets). |
||
|
- |
La limite RLIMIT_CORE ne sâapplique pas aux vidages mĂ©moire tubĂ©s vers un programme Ă lâaide de ce mĂ©canisme. |
/proc/sys/kernel/core_pipe_limit
Lorsquâon collecte des vidages mĂ©moire Ă lâaide dâun tube vers un programme de lâespace utilisateur, il peut sâavĂ©rer utile pour le programme collecteur dâextraire les donnĂ©es Ă propos du processus ayant plantĂ© depuis le rĂ©pertoire /proc/ pid de ce dernier. Pour ce faire en toute sĂ©curitĂ©, le noyau doit attendre que le programme collecteur de vidage mĂ©moire se termine, de façon Ă ne pas supprimer prĂ©maturĂ©ment les fichiers contenus dans le rĂ©pertoire /proc/ pid du processus ayant plantĂ©, ce qui a pour inconvĂ©nient de donner la possibilitĂ© Ă un programme de collecte dĂ©fectueux de bloquer le vidage dâun processus plantĂ© en ne se terminant jamais.
Depuis Linux 2.6.32, on peut utiliser /proc/sys/kernel/core_pipe_limit pour limiter cette possibilitĂ©. La valeur contenue dans ce fichier dĂ©finit le nombre de processus plantĂ©s simultanĂ©s qui peuvent ĂȘtre tubĂ©s en parallĂšle vers des programmes de lâespace utilisateur. Si cette valeur est dĂ©passĂ©e, les processus plantĂ©s concernĂ©s seront consignĂ©s dans le journal du noyau et leurs vidages mĂ©moires omis.
Une valeur de 0 dans ce fichier a une signification particuliĂšre. Elle indique quâil nây a pas de limite au nombre de processus qui peuvent ĂȘtre interceptĂ©s en parallĂšle, mais quâaucune attente ne sera observĂ©e (autrement dit, le programme collecteur nâa aucune garantie dâaccĂ©der Ă /proc/<crashing-PID> ). Par dĂ©faut, ce fichier contient la valeur 0 .
ContrÎler quelles projections seront écrites dans le vidage mémoire
Depuis Linux 2.6.23, le fichier /proc/ pid /coredump_filter spécifique à Linux permet de contrÎler quels segments de mémoire seront écrits dans le fichier image de la mémoire si un 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 ; dans le cas contraire, elles ne le sont pas. Les bits dans ce fichier ont la signification suivante :
|
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 volumineuses.
bit 6 (depuis Linux 2.6.28)
Vider les pages partagées volumineuses.
bit 7 (depuis Linux 4.4)
Vider les pages DAX privées.
bit 8 (depuis Linux 4.4)
Vider les pages DAX partagées.
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. Lâoption dâamorçage coredump_filter permet de modifier ce rĂ©glage par dĂ©faut.
La valeur dans ce fichier est enregistrée en hexadécimal (la valeur par défaut 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 ( vdso (7)) le sont toujours, quelle que soit la valeur de coredump_filter .
Un processus enfant créé avec fork (2) hĂ©rite de la valeur de coredump_filter de son parent ; 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 lâinterprĂ©teur de commande 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 .
Vidages mémoire et systemd
Sur les systĂšmes qui utilisent systemd (1) comme cadriciel pour init , les vidages mĂ©moire peuvent ĂȘtre Ă©crits Ă un emplacement dĂ©terminĂ© par systemd (1). Ă cet effet, systemd (1) utilise la fonctionnalitĂ© core_pattern qui permet de tuber les vidages mĂ©moire vers un programme. Cela peut ĂȘtre vĂ©rifiĂ© en regardant si les vidages mĂ©moires sont tubĂ©s vers le programme systemd-coredump (8) :
$
cat
/proc/sys/kernel/core_pattern
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %e
Dans ce cas, les vidages mĂ©moire seront enregistrĂ©s Ă lâemplacement configurĂ© pour systemd-coredump (8), en gĂ©nĂ©ral sous la forme de fichiers compressĂ©s lz4 (1) dans le rĂ©pertoire /var/lib/systemd/coredump/ . Pour lister les vidages mĂ©moires qui ont Ă©tĂ© enregistrĂ©s par systemd-coredump (8), on peut utiliser coredumpctl (1) :
$
coredumpctl
list | tail -5
Wed 2017-10-11 22:25:30 CEST 2748 1000 1000 3 present
/usr/bin/sleep
Thu 2017-10-12 06:29:10 CEST 2716 1000 1000 3 present
/usr/bin/sleep
Thu 2017-10-12 06:30:50 CEST 2767 1000 1000 3 present
/usr/bin/sleep
Thu 2017-10-12 06:37:40 CEST 2918 1000 1000 3 present
/usr/bin/cat
Thu 2017-10-12 08:13:07 CEST 2955 1000 1000 3 present
/usr/bin/cat
Les informations contenues dans tout vidage mĂ©moire comprennent la date et lâheure du vidage, les PID, UID et GID du processus de vidage, le numĂ©ro du signal qui a dĂ©clenchĂ© le vidage et le chemin de lâexĂ©cutable qui Ă©tait exĂ©cutĂ© par le processus vidĂ©. Plusieurs options de coredumpctl (1) permettent de dĂ©placer le fichier image de la mĂ©moire donnĂ© depuis lâemplacement de systemd (1) vers le fichier spĂ©cifiĂ©. Par exemple, pour extraire le vidage mĂ©moire du PID 2955 montrĂ© plus haut dans un fichier nommĂ© core dans le rĂ©pertoire actuel, on peut utiliser :
$ coredumpctl dump 2955 -o core
Pour des détails plus exhaustifs, voir la page de manuel de coredumpctl (1).
Pour désactiver de maniÚre permanente le mécanisme de systemd (1) qui archive les vidages mémoire et rétablir un fonctionnement plus proche du comportement traditionnel de Linux, on peut définir un contournement du mécanisme de systemd (1) en utilisant quelque chose du genre :
#
echo
"kernel.core_pattern=core.%p" > \
/etc/sysctl.d/50-coredump.conf
#
/lib/systemd/systemd-sysctl
On peut aussi modifier le core_pattern temporairement (jusquâau prochain redĂ©marrage) en utilisant par exemple la commande suivante (qui inclut dans le nom des fichiers image de la mĂ©moire le nom de lâexĂ©cutable et le numĂ©ro du signal qui a dĂ©clenchĂ© le vidage mĂ©moire) :
# sysctl -w kernel.core_pattern="%e-%s.core"
NOTES
La commande gdb (1) gcore permet dâobtenir une image mĂ©moire dâun processus en cours dâexĂ©cution.
JusquâĂ Linux 2.6.27 inclus, si un processus multithreadĂ© (ou plus prĂ©cisĂ©ment, un processus qui partage son espace mĂ©moire avec un autre processus parce que créé avec lâindicateur CLONE_VM de clone (2)) crĂ©e une image mĂ©moire, lâidentifiant du processus (PID) est toujours ajoutĂ© au nom du fichier image de la mĂ©moire, Ă moins que lâidentifiant du processus ne fasse dĂ©jĂ partie du nom de fichier de par la prĂ©sence dâune spĂ©cification %p dans /proc/sys/kernel/core_pattern (cela sâavĂšre principalement utile lors de lâutilisation de lâimplĂ©mentation obsolĂšte LinuxThreads pour laquelle chaque thread dâun processus a son propre PID).
EXEMPLES
Le programme ci-dessous montre lâutilisation de la syntaxe de tubage dans le fichier /proc/sys/kernel/core_pattern . La session de lâinterprĂ©teur de commande suivante montre lâutilisation de ce programme (compilĂ© pour crĂ©er 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
^\
# taper 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[])
{
ssize_t nread, tot;
char buf[BUF_SIZE];
FILE *fp;
char cwd[PATH_MAX];
/* Changer le répertoire de travail actuel pour celui
du
processus qui a planté. */
snprintf(cwd, PATH_MAX, "/proc/%s/cwd", argv[1]);
chdir(cwd);
/* Ăcrire la sortie dans le fichier
"core.info" dans ce répertoire. */
fp = fopen("core.info", "w+");
if (fp == NULL)
exit(EXIT_FAILURE);
/* Afficher les arguments de ligne de commande passés
au programme
cible du tube configuré dans core_pattern. */
fprintf(fp, "argc=%d\n", argc);
for (size_t j = 0; j < argc; j++)
fprintf(fp, "argc[%zu]=<%s>\n", j, argv[j]);
/* Compter les octets sur lâentrĂ©e standard (le
vidage mémoire). */
tot = 0;
while ((nread = read(STDIN_FILENO, buf, BUF_SIZE)) > 0)
tot += nread;
fprintf(fp, "Taille en octets du vidage mémoire
: %zd\n", tot);
fclose(fp);
exit(EXIT_SUCCESS);
}
VOIR AUSSI
bash (1), coredumpctl (1), gdb (1), getrlimit (2), mmap (2), prctl (2), sigaction (2), elf (5), proc (5), pthreads (7), signal (7), systemd-coredump (8)
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Lucien Gentis <lucien.gentis@waika9.com>
Cette traduction est une documentation libre ; veuillez vous reporter Ă la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il nây a aucune RESPONSABILITĂ LĂGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .