CORE(5)

NAZWA
core - plik zrzutu pamięci

OPIS
Dla pewnych sygnałów domyślną akcją procesu jest zakończenie działania i utworzenie pliku zrzutu pamięci (core), czyli pliku zawierającego obraz pamięci procesu w czasie, gdy został on zakończony. Listę sygnałów powodujących utworzenie pliku core przez proces można znaleźć w 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:

*   Proces nie ma uprawnień, aby zapisać plik zrzutu pamięci (Domyślnie plik ten nazywa się core i jest tworzony w bieżącym katalogu roboczym procesu. Nazwę tę można zmienić - patrz niżej). Zapisywanie pliku zrzutu nie powiedzie się również wtedy, gdy prawa katalogu, w którym ten plik miałby być utworzony, nie pozwalają na zapis do niego lub gdy plik o tej samej nazwie istnieje i nie jest zapisywalny lub nie jest zwykłym plikiem (ale np. katalogiem lub dowiązaniem symbolicznym).

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

*   Limity zasobów RLIMIT_CORE lub RLIMIT_FSIZE dla procesu są ustawione na zero (patrz getrlimit(2)).

*   Nie są ustawione uprawnienia do odczytu pliku binarnego uruchomionego przez proces.

*   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. (Jednakże patrz w prctl(2) opis operacji PR_SET_DUMPABLE oraz w proc(5) opis pliku /proc/sys/fs/suid_dumpable).

  Nazwy plików zrzutu pamięci
Domyślnie plik zrzutu pamięci nazywa się core, jednakże w pliku </proc/sys/kernel/core_pattern> (wprowadzonym w Linuksie 2.5) 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 %
  %p  PID procesu zrzucającego pamięć
  %u  rzeczywisty UID tego procesu
  %g  rzeczywisty GID tego procesu
  %s  numer sygnału wywołującego zrzut pamięci
  %t  czas zrzutu (sekundy od północy 1 stycznia 1970)
  %h  nazwa komputera (to samo co 'nodename'
      zwracane przez uname(2))
  %e  nazwa pliku wykonywalnego

Jeśli szablon kończy się pojedynczym znakiem %, to znak ten zostanie usunięty z nazwy pliku zrzutu. Podobnie zostaną usunięte wszelkie inne kombinacje % i znaku niż te, wymienione powyżej. Wszystkie inne znaki szablonu staną się częścią nazwy pliku zrzutu. Maksymalna długość wygenerowanej nazwy pliku wynosi 64 bajty. 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. Linux 2.4 zamiast pliku /proc/sys/kernel/core_pattern dostarczał bardziej prymitywną metodę 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.

UWAGI
Aby uzyskać zrzut pamięci działającego procesu, można użyć polecenia gcore programu gdb(1). 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 ID procesu zawsze będzie dołączone do nazwy pliku zrzutu, chyba że owo ID procesu już występuje w nazwie pliku, ponieważ w pliku /proc/sys/kernel/core_pattern użyto specyfikatora %p.

ZOBACZ TAKŻE
gdb(1), getrlimit(2), prctl(2), sigaction(2), elf(5), proc(5), signal(7)