Chcę zatrzymać długotrwały proces, aby nie zużywał zasobów procesora ani pamięci fizycznej, z zamiarem wznowienia tego samego procesu w przyszłości.
Wiem, że część procesora jest osiągalny za pomocą SIGSTOP
i SIGCONT
sygnały , ale jest to możliwe do strony out (swap w przypadku brudnych stron procesu) natychmiast prywatny RSS z pamięci (zatrzymany) proces?
linux
process
swap
virtual-memory
idelvall
źródło
źródło
Odpowiedzi:
Możesz spojrzeć na technikę o nazwie punkt kontrolny / przywracanie. Umożliwi to uruchomienie uruchomionego procesu i zapisanie jego stanu w zestawie plików, a następnie przywrócenie go w późniejszym czasie.
Aby z niego skorzystać, zacznij od zainstalowania programu criu [ git , wiki ] (
yum install criu
lubapt install criu
).Aby sprawdzić działający proces, utwórz pusty katalog, w którym będą przechowywane jego pliki, i włóż dysk CD do tego katalogu.
Teraz sprawdź działający proces. W tym przypadku korzystam z zadania --shell, ponieważ mój proces działa w powłoce z powiązanym tty.
404 to pid procesu, który chcę sprawdzić. Kiedy to robię, widzę, że mój proces został zabity, a mój katalog / var / tmp / checkpoint został zapełniony zestawem plików potrzebnych do jego przywrócenia.
Aby przywrócić proces, upewniam się, że jestem w katalogu z plikami punktów kontrolnych i przywracam.
Proces rozpocznie się w miejscu, w którym został przerwany, w terminalu, w którym został uruchomiony. Jeśli zabiję ten uruchomiony proces i uruchomię go
criu restore --shell-job
ponownie, proces powróci do punktu kontrolnego i uruchomi się ponownie.Mam nadzieję że to pomoże.
źródło
/tmp
jest to tmpfs (wspierany przez pamięć / przestrzeń wymiany). Jeślivmtouch -e
zaznaczysz punkt kontrolny do normalnego systemu plików opartego na dysku, możesz następnie użyć do eksmisji stron z pamięci podręcznej, ale nadal tymczasowo używa dodatkowej pamięci RAM. (Chyba żecriu
ma opcję bezpośredniego wejścia / wyjścia (z O_DIRECT) ...)