Czy istnieje sposób na uzyskanie zrzutu podstawowego (lub czegoś podobnego) dla procesu bez faktycznego zabijania procesów? Mam wielowątkowy proces Pythona działający w systemie osadzonym. I chcę być w stanie uzyskać migawkę procesu w normalnych warunkach (tj. Z innymi procesami wymaganymi do uruchomienia), ale nie mam wystarczającej ilości pamięci, aby połączyć gdb (lub uruchomić go pod gdb) bez procesu python jako jedyny biegający.
Mam nadzieję, że to pytanie ma sens.
Odpowiedzi:
Zwykła sztuczka polega na tym, aby coś (być może sygnał podobny
SIGUSR1
) uruchomiło programfork()
, a następnie dziecko wywołuje funkcjęabort()
zrzutu pamięci.i podczas inicjalizacji
Użyty w ten sposób
fork
nie zużywa dużo dodatkowej pamięci, ponieważ prawie cała przestrzeń adresowa będzie współdzielona (dlatego też działa to w przypadku generowania zrzutu podstawowego).Dawno temu tę sztuczkę stosowano w programie wywoływanym
undump
do generowania pliku wykonywalnego z zrzutu pamięci, aby zapisać obraz po złożonej inicjalizacji;emacs
służył do tego w celu wygenerowania wstępnie załadowanego obrazu ztemacs
.źródło
Możesz spróbować użyć
gcore
. Czy to dla ciebie opcja?źródło