Provided by: manpages-pl_4.15.0-9_all bug

NAZWA

       core - plik zrzutu pamięci

OPIS

       The  default  action  of  certain signals is to cause a process to terminate and produce a
       core dump file, a file containing an  image  of  the  process's  memory  at  the  time  of
       termination.  This image can be used in a debugger (e.g., gdb(1))  to inspect the state of
       the program at the time that it terminated.  A list of the signals which cause  a  process
       to dump core can be found in signal(7).

       Proces  może  ustawić  miękki limit zasobów RLIMIT_CORE, aby ograniczyć maksymalny rozmiar
       pliku,  który  zostanie  utworzony  po  otrzymaniu  sygnału  powodującego  zrzut  pamięci;
       szczegółowe informacje można znaleźć w getrlimit(2).

       W następujących wypadkach plik zrzutu pamięci nie będzie utworzony:

       *  The  process  does  not  have permission to write the core file.  (By default, the core
          file is called core or core.pid, where pid is the ID of the process that  dumped  core,
          and  is  created  in  the current working directory.  See below for details on naming.)
          Writing the core file fails if the directory in which  it  is  to  be  created  is  not
          writable,  or  if  a  file  with  the  same name exists and is not writable or is not a
          regular file (e.g., it is a directory or a symbolic link).

       *  Już istnieje (zapisywalny, zwykły) plik o tej samej nazwie, jaka  zostałaby  użyta  dla
          pliku zrzutu pamięci, jednakże plik ten ma więcej niż jedno dowiązanie twarde.

       *  System  plików,  w którym zostałby utworzony plik zrzutu pamięci, jest pełny, wyczerpał
          mu się limit i-węzłów, jest zamontowany w  trybie  tylko  do  odczytu  albo  użytkownik
          osiągnął kwotę systemu plików

       *  Nie istnieje katalog, w którym miałby być utworzony plik zrzutu pamięci.

       *  Limity  zasobów  RLIMIT_CORE  (rozmiar  pliku zrzutu pamięci) lub RLIMIT_FSIZE (rozmiar
          pliku) dla procesu są ustawione na zero; patrz getrlimit(2) i dokumentacja  wbudowanego
          w powłokę polecenia ulimit (lub limit w powłoce csh(1)).

       *  The  binary being executed by the process does not have read permission enabled.  (This
          is a security measure to ensure that an executable whose contents are not readable does
          not produce a—possibly readable—core dump containing an image of the executable.)

       *  Proces  uruchomił program z flagą set-user-ID (set-group-ID), którego właścicielem jest
          użytkownik  (grupa)  inny  niż  rzeczywisty  użytkownik  (grupa)  procesu  lub   proces
          wykonujący  program  ma  przywileje  plikowe  (zob. capabilities(7)). (Jednakże patrz w
          prctl(2)   opis    operacji    PR_SET_DUMPABLE    oraz    w    proc(5)    opis    pliku
          /proc/sys/fs/suid_dumpable).

       *  /proc/sys/kernel/core_pattern  is empty and /proc/sys/kernel/core_uses_pid contains the
          value    0.     (These    files    are    described    below.)     Note     that     if
          /proc/sys/kernel/core_pattern  is empty and /proc/sys/kernel/core_uses_pid contains the
          value 1, core dump files will have names of the form .pid, and such  files  are  hidden
          unless one uses the ls(1)  -a option.

       *  (od Linuksa 3.7) Jądro zostało zbudowane bez opcji CONFIG_COREDUMP.

       Dodatkowo zrzut pamięci może nie zawierać części przestrzeni adresowej procesu jeśli użyto
       flagi MADV_DONTDUMP madvise(2).

       On systems that employ systemd(1)  as the init framework, core dumps may instead be placed
       in a location determined by systemd(1).  See below for further details.

   Nazwy plików zrzutu pamięci
       Domyślnie    plik    zrzutu    pamięci    nazywa    się    core,    jednakże    w    pliku
       /proc/sys/kernel/core_pattern (od wersji 2.6 i 2.4.21 Linuksa) można zdefiniować  szablon,
       który będzie użyty do nazywania plików zrzutu pamięci. Szablon ten może zawierać specjalne
       znaczniki zaczynające się od "%", które podczas tworzenia  pliku  zrzutu  będą  zastąpione
       następującymi wartościami:

           %%  Pojedynczy znak %.
           %c  Miękki  limit zasobu rozmiaru pliku zrzutu pamięci procesu zrzucającego pamięć (od
               Linuksa 2.6.24).
           %d  Tryb zrzutu—taki sam jak  wartość  zwracana  przez  prctl(2)  PR_GET_DUMPABLE  (od
               Linuksa 3.7).
           %e  The  process or thread's comm value, which typically is the same as the executable
               filename (without path prefix, and truncated to a maximum of 15  characters),  but
               may  have  been  modified  to  be  something  different;  see  the  discussion  of
               /proc/[pid]/comm and /proc/[pid]/task/[tid]/comm in proc(5).
           %E  Nazwa  ścieżki  pliku  wykonywalnego,  z  ukośnikami  ("/")   zastąpionymi   przez
               wykrzykniki ("!") (od Linuksa 3.0).
           %g  Numeryczny identyfikator grupy (GID) procesu, który zrzucił pamięć.
           %h  Nazwa komputera (taka sama jak nodename zwracane przez uname(2)).
           %i  identyfikator  wątku (TID) który zainicjował zrzut pamięci, taki jak w przestrzeni
               nazw PID-ów w której wątek działa (od Linuksa 3.18).
           %I  identyfikator wątku (TID) który zainicjował zrzut pamięci, taki jak w  początkowej
               przestrzeni nazw PID-ów (od Linuksa 3.18).
           %p  identyfikator  zrzucanego  procesu,  taki  jak  w przestrzeni nazw PID-ów w której
               proces działa.
           %P  identyfikator zrzucanego procesu, taki jak w początkowej przestrzeni  nazw  PID-ów
               (od Linuksa 3.12).
           %s  Numer sygnału powodującego zrzut pamięci.
           %t  Czas  zrzutu  wyrażony w sekundach od początku epoki, czyli od 1970-01-01 00:00:00
               +0000 (UTC).
           %u  Numeryczny identyfikator użytkownika (UID) procesu, który zrzucił pamięć.

       Jeśli szablon kończy się pojedynczym znakiem %, to znak  ten  zostanie  usunięty  z  nazwy
       pliku  zrzutu.  Podobnie  zostaną usunięte wszelkie kombinacje % ze znakami innymi niż te,
       wymienione powyżej. Wszystkie inne znaki szablonu staną się częścią  nazwy  pliku  zrzutu.
       Szablon  może  zawierać znaki "/", które są interpretowane jako separatory nazw katalogów.
       Maksymalna długość wygenerowanej nazwy pliku wynosi 128 bajtów (64 bajty w wersjach  jądra
       wcześniejszych  niż  2.6.19).  Domyślną wartością jest "core". W celu zachowania wstecznej
       zgodności,     jeśli     /proc/sys/kernel/core_pattern     nie     zawiera      %p,      a
       /proc/sys/kernel/core_uses_pid   (patrz  niżej)  ma  niezerową  wartość,  to  .PID  będzie
       dołączony do nazwy pliku zrzutu.

       Paths are interpreted according to the settings that are active for the crashing  process.
       That  means  the crashing process's mount namespace (see mount_namespaces(7)), its current
       working directory (found via getcwd(2)), and its root directory (see chroot(2)).

       Od wersji 2.4 Linux dostarcza również  bardziej  prymitywnej  metody  kontrolowania  nazwy
       pliku  zrzutu  pamięci.  Gdy  plik  /proc/sys/kernel/core_uses_pid zawiera wartość 0, plik
       zrzutu pamięci ma po prostu nazwę core. Gdy  plik  ten  zawiera  wartość  niezerową,  plik
       zrzutu pamięci będzie zawierał w swojej nazwie ID procesu, w postaci core.PID.

       Od  Linuksa  3.6  jeśli  /proc/sys/fs/suid_dumpable ustawiono na 2 ("suidsafe") to wzorzec
       musi być albo ścieżką absolutną (zaczynającą się znakiem  "/")  lub  potokiem,  zgodnie  z
       poniższą definicją.

   Przekazywanie zrzutów pamięci potokiem do programu
       Since    kernel    2.6.19,    Linux    supports    an    alternate    syntax    for    the
       /proc/sys/kernel/core_pattern file.  If the first character of this file is a pipe  symbol
       (|),  then  the  remainder of the line is interpreted as the command-line for a user-space
       program (or script) that is to be executed.

       Since kernel 5.3.0, the pipe template is split on spaces into an argument list before  the
       template  parameters  are  expanded.   In  earlier  kernels,  the  template parameters are
       expanded first and the resulting string is split on spaces into an  argument  list.   This
       means  that in earlier kernels executable names added by the %e and %E template parameters
       could get split into multiple arguments.  So the  core  dump  handler  needs  to  put  the
       executable names as the last argument and ensure it joins all parts of the executable name
       using spaces.  Executable names with multiple spaces in them are not correctly represented
       in earlier kernels, meaning that the core dump handler needs to use mechanisms to find the
       executable name.

       Instead of being written to a file, the core dump  is  given  as  standard  input  to  the
       program.  Note the following points:

       *  Program musi być podany używając ścieżki bezwzględnej (lub ścieżki względnej w stosunku
          do korzenia systemu plików, czyli katalogu /) i musi występować bezpośrednio  po  znaku
          "|".

       *  Argumenty  linii poleceń mogą zawierać dowolne z wymienionych powyżej specyfikatorów %.
          Na przykład, aby przekazać identyfikator procesu zrzucającego pamięć, należy  podać  %p
          jako argument.

       *  Proces tworzony do wykonania programu jest wykonywany jako użytkownik i grupa root.

       *  Running as root does not confer any exceptional security bypasses.  Namely, LSMs (e.g.,
          SELinux) are still active and may prevent the handler from accessing details about  the
          crashed process via /proc/[pid].

       *  The  program  pathname is interpreted with respect to the initial mount namespace as it
          is always executed there.  It is not affected by the settings  (e.g.,  root  directory,
          mount namespace, current working directory) of the crashing process.

       *  The process runs in the initial namespaces (PID, mount, user, and so on) and not in the
          namespaces of the crashing process.  One can utilize specifiers such as %P to find  the
          right  /proc/[pid]  directory  and  probe/enter  the  crashing  process's namespaces if
          needed.

       *  The process starts with its current  working  directory  as  the  root  directory.   If
          desired,  it  is  possible  change  to  the working directory of the dumping process by
          employing the value provided by the %P specifier to  change  to  the  location  of  the
          dumping process via /proc/[pid]/cwd.

       *  Można  przekazać  do programu argumenty linii poleceń (od Linuksa 2.6.24), rozdzielając
          je spacjami (aż  do  wyczerpania  limitu  całkowitej  długości  linii  wynoszącego  128
          bajtów).

       *  The  RLIMIT_CORE  limit  is not enforced for core dumps that are piped to a program via
          this mechanism.

   /proc/sys/kernel/core_pipe_limit
       When collecting core dumps via a pipe to a user-space program, it can be  useful  for  the
       collecting  program  to  gather  data  about  the  crashing  process  from  that process's
       /proc/[pid] directory.  In order to do this safely, the kernel must wait for  the  program
       collecting  the  core dump to exit, so as not to remove the crashing process's /proc/[pid]
       files prematurely.  This in turn creates the possibility  that  a  misbehaving  collecting
       program can block the reaping of a crashed process by simply never exiting.

       Since  Linux  2.6.32,  the  /proc/sys/kernel/core_pipe_limit can be used to defend against
       this possibility.  The value in this file defines how many concurrent  crashing  processes
       may  be  piped  to user-space programs in parallel.  If this value is exceeded, then those
       crashing processes above this value are noted in the kernel log and their core  dumps  are
       skipped.

       A  value  of  0  in  this  file  is special.  It indicates that unlimited processes may be
       captured in parallel, but that no waiting will take place (i.e., the collecting program is
       not guaranteed access to /proc/<crashing-PID>).  The default value for this file is 0.

   Kontrolowanie mapowań zapisywanych do pliku zrzutu pamięci
       Od    wersji    2.6.23    jądra    można    użyć    specyficznego    dla   Linuksa   pliku
       /proc/[PID]/coredump_filter do kontrolowania, które segmenty pamięci zostaną  zapisane  do
       pliku  zrzutu  pamięci,  w  przypadku  gdy  pamięć  jest  zrzucana  przez proces o podanym
       identyfikatorze.

       Wartość w tym pliku jest maską bitową typów mapowań pamięci  (patrz  mmap(2)).  Jeśli  bit
       jest  ustawiony  w  masce,  to  odpowiadające  mu  mapowanie  jest  zapisywane  w pliku, w
       przeciwnym wypadku - nie jest. Bity w masce mają następujące znaczenia:

           bit 0  Zrzucanie anonimowych mapowań prywatnych.
           bit 1  Zrzucanie anonimowych mapowań współdzielonych.
           bit 2  Zrzucanie prywatnych mapowań plików.
           bit 3  Zrzucanie współdzielonych mapowań plików.
           bit 4 (od Linuksa 2.6.24)
                  Zrzucanie nagłówków ELF.
           bit 5 (od Linuksa 2.6.28)
                  Zrzucanie prywatnych dużych stron.
           bit 6 (od Linuksa 2.6.28)
                  Zrzucanie współdzielonych dużych stron.
           bit 7 (od Linuksa 4.4)
                  Zrzucanie prywatnych stron DAX.
           bit 8 (od Linuksa 4.4)
                  Zrzucanie współdzielonych stron DAX.

       Domyślnie  ustawione  są  następujące  bity:  0,  1,  4   (jeśli   jest   włączona   opcja
       CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS konfiguracji jądra) oraz 5. Tę wartość domyślną można
       zmodyfikować przy rozruchu za pomocą opcji coredump_filter.

       Wartość tego pliku jest wyświetlana szesnastkowo (z  tego  powodu  domyślna  wartość  jest
       wyświetlana jako 33).

       Strony  wejścia/wyjścia mapowane w pamięci, takie jak frame buffer, nigdy nie są zrzucane,
       a  wirtualne  strony  DSO  (vdso(7))  są  zawsze   zrzucane,   niezależnie   od   wartości
       coredump_filter.

       Proces-dziecko  utworzony  przez  fork(2)  dziedziczy  wartość  coredump_filter od swojego
       rodzica; wartość ta jest także zachowywana podczas execve(2).

       Może być użyteczne ustawienie coredump_filter w powłoce przed uruchomieniem  programu,  na
       przykład:

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

       Plik   istnieje,   jeśli   jądro   zostało   zbudowane   z   włączoną  opcją  konfiguracji
       CONFIG_ELF_CORE.

   Core dumps and systemd
       On systems using the systemd(1)  init framework, core dumps may be placed  in  a  location
       determined  by  systemd(1).   To do this, systemd(1) employs the core_pattern feature that
       allows piping core dumps to a program.  One can verify this by checking whether core dumps
       are being piped to the systemd-coredump(8)  program:

           $ cat /proc/sys/kernel/core_pattern
           |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %e

       In   this   case,   core   dumps   will   be   placed   in  the  location  configured  for
       systemd-coredump(8),  typically   as   lz4(1)    compressed   files   in   the   directory
       /var/lib/systemd/coredump/.   One  can  list  the  core  dumps  that have been recorded by
       systemd-coredump(8)  using 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

       The information shown for each core dump includes the date and time of the dump, the  PID,
       UID,  and GID of the dumping process, the signal number that caused the core dump, and the
       pathname of the executable that was being run by the dumped process.  Various  options  to
       coredumpctl(1)  allow a specified coredump file to be pulled from the systemd(1)  location
       into a specified file.  For example, to extract the core dump for PID 2955 shown above  to
       a file named core in the current directory, one could use:

           $ coredumpctl dump 2955 -o core

       For more extensive details, see the coredumpctl(1)  manual page.

       To (persistently) disable the systemd(1)  mechanism that archives core dumps, restoring to
       something more like traditional Linux behavior, one can set an override for the systemd(1)
       mechanism, using something like:

           # echo "kernel.core_pattern=core.%p" > \
                          /etc/sysctl.d/50-coredump.conf
           # /lib/systemd/systemd-sysctl

       It  is  also possible to temporarily (i.e., until the next reboot) change the core_pattern
       setting using a command such as the following (which causes the names of core  dump  files
       to  include  the  executable  name as well as the number of the signal which triggered the
       core dump):

           # sysctl -w kernel.core_pattern="%e-%s.core"

UWAGI

       Aby uzyskać zrzut pamięci  działającego  procesu,  można  użyć  polecenia  gcore  programu
       gdb(1).

       W  wersjach jądra Linux do 2.6.27 włącznie, jeżeli pamięć zrzuca proces wielowątkowy (albo
       - bardziej precyzyjnie - proces, który dzieli swą pamięć z  innym  procesem  utworzonym  z
       flagą  CLONE_VM  funkcji  clone(2)),  to  identyfikator procesu zawsze będzie dołączony do
       nazwy pliku zrzutu, chyba że ów  identyfikator  procesu  już  występuje  w  nazwie  pliku,
       ponieważ  w pliku /proc/sys/kernel/core_pattern użyto specyfikatora p (Jest to szczególnie
       użyteczne podczas stosowania przestarzałej  implementacji  LinuxThreads,  w  której  każdy
       wątek procesu ma inny PID).

PRZYKŁADY

       Poniższy  program  pokazuje  użycie  składni potoku w pliku /proc/sys/kernel/core_pattern.
       Poniższa sesja powłoki demonstruje użycie tego programu (skompilowanego do pliku o  nazwie
       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
           ^\                     # wpisz control+odwrotny ukośnik
           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>
           Całkowita liczba bajtów pliku core: 282624

   Kod źródłowy programu

       /* 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];

           /* Zmienia bieżący katalog roboczy na katalog procesu,
              który generuje zrzut pamięci. */

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

           /* Zapisuje wyjście do pliku "core.info" w tym katalogu. */

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

           /* Wyświetla argumenty linii poleceń przekazane do programu
              filtrującego "core_pattern". */

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

           /* Zlicza bajty na standardowym wejściu (daje rozmiar
              zrzutu pamięci). */

           tot = 0;
           while ((nread = read(STDIN_FILENO, buf, BUF_SIZE)) > 0)
               tot += nread;
           fprintf(fp, "Całkowita liczba bajtów pliku core: %zd\n", tot);

           fclose(fp);
           exit(EXIT_SUCCESS);
       }

ZOBACZ TAKŻE

       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)

O STRONIE

       Angielska wersja tej strony  pochodzi  z  wydania  5.13  projektu  Linux  man-pages.  Opis
       projektu,  informacje  dotyczące  zgłaszania  błędów oraz najnowszą wersję oryginału można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony  podręcznika   są:   Robert   Luberda
       <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją. Bliższe informacje o warunkach licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   lub   nowszej.   Nie  przyjmuje  się  ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.