Szukam sposobu na wykonanie nieinwazyjnej operacji rdzeniowej w systemie Linux.
Znam gdb gcore, ale można go uruchomić tylko wtedy, gdy gdbjest dołączony do procesu i jest zatrzymany w celu debugowania. Dla dużego zrzutu rdzenia, który może oznaczać wiele sekund, a nawet kilka minut przerwanego wykonywania.
Czy jest jakaś nieblokująca alternatywa?
Linux obsługuje kopiowanie przy zapisie pamięci, który opiera się na wsparciu fork()bez exec(). Tak więc myślę o czymś na poziomie jądra, w którym jądro pobiera migawkę kopii przy zapisie tabel stron procesu zrzucanego procesu, a następnie wypisuje rdzeń, podczas gdy oryginalny proces nadal działa.
Jestem prawie pewien, że mógłbym użyć gdbsiły, a fork()następnie rzucić dziecko, podczas gdy rodzic kontynuuje radość, a następnie wait()w rodzic, aby zebrać dziecko po zakończeniu. Jest to jednak bałagan i nadal wymaga dwóch przerw w procesie macierzystym, aczkolwiek krótkich.
Z pewnością ktoś tego wcześniej potrzebował?