miez (5) din fișierul de imagine memorie de proces
Pentru anumite acțiuni semnale implicit este de a termina procesul și crearea, procedeul care cuprinde memoria de imagine la momentul finalizării procesului de memorie haldei --- fișier pe disc. Această imagine poate fi utilizată ca un depanator (de exemplu, gdb (1)) pentru programul de cercetare al statului în momentul finalizării acestuia. Lista semnalelor care rezultă în groapa de memorie procesul de creare, pot fi găsite în semnalul (7).
Un proces poate stabili limita moale a RLIMIT_CORE resurse la valoarea maximă a dimensiunii fișierului haldei care va fi creat în cazul în care procesul primește un semnal de „arunce“; Pentru detalii, a se vedea getrlimit (2).
Există mai multe situații în care nu este creat fișierul de imagine memorie:
Numirea unui fișier de imagine memorie parțială
În mod implicit, fișierul este atribuit un nume de bază de imagine memorie. dar folosind fișierul / proc / sys / kernel / core_pattern (din Linux 2.6 și 2.4.21), puteți specifica un șablon care va fi folosit pentru a denumi fișierele basculante de memorie. Șablonul poate conține% specificatorilor, care sunt înlocuite de următoarele valori pentru a crea un fișier de imagine:
%% o limită de moale singur caracter %% c prăbușit dimensiunea proces fișier de imagine (din Linux 2.6.24). Mod benă - aceeași ca valoarea returnată a prctl (2) PR_GET_DUMPABLE (din Linux 3.7) e numele% executabil (fara cale), calea% E pentru fișierul executabil, care slash ( „/“) se înlocuiește cu semne de exclamare ( '!') (din Linux 3.0). % G (numărul) de proces GID real, ceea ce se face groapa nume% h gazdă (ca nodename. Înapoi uname (2))% i TID fire din cauza care își are originea haldei, în raport cu numele de spațiu PID în care firul este (deoarece Linux 3,18)% I fire TID din cauza care își are originea haldei, în raport cu numele inițial spațiu PID (începând cu Linux 3.18) proces PID% p, care este groapa așa cum se vede în spațiul de nume PID, în care procedeul este un proces PID% P inițial, care se face cu groapa așa cum este văzut în spațiul de nume original, PID, care este situat la sută ESA (din Linux 3.12)% s numărul de semnal care a determinat crearea haldei haldei% t timp, exprimat în secunde, încă din epoca, 1970-01-01 00:00:00 +0000 (UTC)% u (numărul) UID real al procesului din care este o groapa
O singură% la sfârșitul șablonului este scăzut de la numele de fișier de imagine cu un simbol, după%, altele decât cele enumerate anterior. Toate celelalte caractere din șablon sunt inserate în numele fișierului de imagine așa cum este. Un șablon poate conține caracterele „/“, care sunt interpretate ca delimitatori pentru nume de directoare. Dimensiunea maximă a numelui fișierului haldei rezultat este de 128 octeți (64 de biți pentru nucleele versiunea 2.6.19). Valoarea implicită în acest fișier același „miez“. Pentru compatibilitate inversă, dacă / proc / sys / kernel / core_pattern conține "% p" valoare și / proc / sys / kernel / core_uses_pid (cm. Mai jos) nu este egal cu zero, apoi la un nume de fișier de imagine este adăugat .PID.
Începând cu versiunea 2.4, Linux oferă, de asemenea, o metodă mai primitivă de a controla numele fișierului haldei. Dacă fișierul / proc / sys / kernel / core_uses_pid conține valoarea 0, fișierul de imagine memorie de memorie este pur și simplu numit de bază. Dacă acest fișier conține o valoare nenulă, se adaugă numele fișierului haldei la ID-ul de proces (sub formă de core.PID).
Deoarece Linux 3.6, în cazul în care valoarea unui / proc / sys / fs / suid_dumpable este 2 ( «suidsafe»), șablonul trebuie să fie o cale absolută (începe cu caracterul „/“) sau canalul așa cum este descris în continuare.
Transfer program de fișier de imagine prin canalul
Începând cu versiunea 2.6.19, Linux suportă o sintaxă alternativă pentru fișierul / proc / sys / kernel / core_pattern. În cazul în care primul caracter din fișierul este simbolul canalului (|), atunci linia rămasă ca un program pentru a fi rulat. În loc de a scrie fișierul pe disc de memorie de imagine este transmis la intrarea standard a programului. Notă următoarele puncte: * Programul trebuie să fie dat numele fișierului absolut (sau o cale relativă la directorul rădăcină, /), iar numele trebuie să urmeze imediat caracterul „|“. * Pentru a crea un proces pentru a rula programul va fi rulat ca utilizatorul rădăcină și de grup. * Programul poate trece argumente în linia de comandă (de la Linux 2.6.24), separându-le prin spații (dimensiunea maximă rând de 128 octeți). * Argumentele linie de comandă sunt descriptorii% enumerate mai devreme. De exemplu, pentru a trece PID procesului, pentru care se face groapa, introduceți argumentul% p.
Controlul de afișare este înregistrată în groapa de gunoi de memorie
Începând cu versiunea 2.6.23, Linux a apărut în fișierul / proc / PID / coredump_filter. care determină ce segmente de memorie sunt scrise într-un fișier de imagine de memorie atunci când răspunsul în memoria procesului de creare eveniment benă cu ID-ul de proces corespunzător.
Înțeles fișierul este un tip bitmask de hărți de memorie (a se vedea. Mmap (2)). Dacă bitul masca este setat, atunci afișajul corespunzător pentru a dump de memorie de tip; în caz contrar groapa de gunoi nu este efectuată. Biții din acest fișier au următoarele semnificații:
bit 0 Dump mapări private, anonime. bit 1 Dump mapări partajate anonime. bit 2 Dump mapări private din memoria virtuală (fișier-sprijinit). bit 3 Dump mapări comune din memoria virtuală (fișier-sprijinit). Bit 4 (din Linux 2.6.24) Efectuați o antetele benă ELF. Bit 5 (din Linux 2.6.28) Dump pagini uriașe private. Bit 6 (din Linux 2.6.28) Dump pagini generale uriașe. bit 7 (din Linux 4.4) Dump pagini private, DAX. 8 biți (din Linux 4.4) Dump pagini comune DAX.
În mod implicit, sunt setați următorii biți: 0, 1, 4 (în cazul în care kernel-ului CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS parametrilor de configurare) și 5. Această valoare poate fi modificată în timpul pornirii sistemului prin setarea coredump_filter de încărcare.
Valoarea acestui fișier este afișat în hexa (care este, implicit arata ca 33).
Pentru pagini de intrare-ieșire, afișate în memorie, cum ar fi un tampon cadru, groapa de gunoi nu este niciodată satisfăcută, iar paginile virtuale DSO intră în groapa întotdeauna, indiferent de valoarea coredump_filter.
Procesul de copil creat de furcă (2), valoarea moștenește părinte coredump_filter; Valoarea coredump_filter este stocată și execve (2).
coredump_filter utilă specificați o valoare în carcasa mamă înainte de pornirea programului, de exemplu:
Acest fișier este în sistem numai în cazul în care kernel-ul a fost compilat cu setările CONFIG_ELF_CORE.
GDB de comandă (1) gcore poate fi folosit pentru a arunca procesul de lucru.
Versiunea Linux pentru a 26.27 în cazul în care un proces inclusiv, multithreaded (sau, mai precis, un proces care împarte memoria sa cu un alt proces creat cu CLONE_VM este prin clona (2)) a efectuat o imagine de memorie, ID-ul de proces este întotdeauna atașat la numele fișierului haldei, dacă un ID de proces nu este inclus în numele printr-o% p / proc / sys / kernel / core_pattern (acest lucru este util mai ales atunci când sunt aplicate LinuxThreads de implementare vechi, în care fiecare fir are propriul proces PID).
Acest program poate fi folosit pentru a demonstra sintaxa canalului în fișierul / proc / sys / kernel / core_pattern. Următoarea sesiune shell demonstrează utilizarea acestui program (fișier executabil numit core_pattern_pipe_test a fost creat atunci când compilarea):