Powiedzmy, że (bardzo) duży proces powoduje awarię i wyrzucanie rdzenia, a przyczynę znamy z innych informacji (być może wiadomość potwierdzająca, a może coś innego).
Czy istnieje sposób, aby zatrzymać generowanie zrzutu pamięci, ponieważ w tym przypadku jest to strata?
Na przykład, czy zabicie -9 procesu zrzutu rdzenia przerwałoby generowanie pliku rdzenia?
Oczywiście, gdybyśmy z góry wiedzieli, że nie chcemy zrzutów rdzenia, moglibyśmy odpowiednio ustawić ulimit lub użyć różnych narzędzi kontroli plików rdzenia systemu operacyjnego.
Ale to pytanie dotyczy etapu „zrzutu pamięci już w toku” ...
(Na przykład wyobraź sobie, że jestem żądającym w /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit i nie chcę marnować 5 -6 TB miejsca na dysku :))
Odpowiedzi:
Ogólnie: nie, nie ma sposobu, aby niezawodnie zabić rdzeń rdzeniowy.
Biorąc to pod uwagę, istnieje możliwość (przynajmniej w systemie Linux) komercyjnego * NIX prawdopodobnie nie ma mowy
Możliwość polega na tym, że jądro serii 3.x jest w stanie przerwać zapisywanie plików. Jedną z możliwości jest znalezienie wątku, który wykonuje zrzut i wielokrotnie wysyłać do niego SIGKILL, dopóki się nie powiedzie.
Ta seria poprawek rozwiązuje problem do pewnego poziomu.
Inną możliwością jest użycie alternatywnej składni dla coredump_pattern. Podręcznik mówi, że od wersji 2.6.19 zamiast wzorca można użyć potoku i programu (z parametrami), który będzie obsługiwał zrzut. Ergo będziesz miał kontrolę nad tym, który zrzut zostanie zapisany w miejscu (/ dev / null jest oczywistym kandydatem na twoje bezużyteczne rdzenie).
Ta łatka również zasługuje na uwagę: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html
źródło
sprawdź ten link, może być pomocny
https://publib.boulder.ibm.com/httpserv/ihsdiag/coredumps.html
źródło
Wygląda na to, że możesz uruchomić ulimit -c (zakładając, że używasz bash), aby ograniczyć rozmiar zrzutu pamięci.
Zobacz: /ubuntu/220905/how-to-remove-limit-on-core-dump-file-size
i
http://ss64.com/bash/ulimit.html
źródło