Polecenia nice oraz renice umożliwiają dostosowanie priorytetów procesów w systemie operacyjnym, co pozwala na efektywniejsze zarządzanie zasobami. Ten przewodnik pomoże Ci zrozumieć, jak je stosować w systemach Linux oraz Unix, w tym macOS.
Procesy w centrum uwagi
W systemie Linux lub Unix działa wiele procesów, nawet zanim uruchomisz jakiekolwiek aplikacje. Większość z tych procesów jest niezbędna dla funkcjonowania samego systemu lub wspiera środowisko graficzne. W tle zachodzi wiele operacji, a jądro Linuksa pełni rolę kontrolera tych procesów.
Jądro musi decydować, które procesy wymagają natychmiastowej uwagi i zasobów, a które mogą poczekać. W ciągłym procesie zarządzania priorytetami, jądro stara się zapewnić, aby komputer działał sprawnie, a wszystkie procesy uzyskiwały odpowiednią ilość zasobów. Niektóre z nich mają wyższy priorytet, ponieważ są kluczowe dla działania systemu, na przykład w porównaniu do przeglądarki internetowej.
Zrozumienie wartości nice
Jednym z kluczowych parametrów, które wpływają na to, jak jądro traktuje proces, jest wartość nice. Każdy proces ma przypisaną wartość nice, która jest liczbą całkowitą w zakresie od -19 do 20. Procesy standardowe są uruchamiane z wartością nice równą zero.
Wartość nice działa w ten sposób: im wyższa wartość, tym bardziej „uprzejmy” jest dany proces wobec innych. W praktyce oznacza to, że proces z wyższą wartością nice chętniej ustępuje zasobów innym procesom. Z kolei wartość ujemna oznacza, że proces jest bardziej samolubny, dążąc do maksymalnego wykorzystania czasu procesora kosztem innych procesów.
Możemy użyć polecenia nice, aby ustawić wartość nice podczas uruchamiania procesu, a polecenie renice do zmiany tej wartości dla działającego procesu.
Użycie polecenia nice
Polecenie nice pozwala na modyfikację wartości nice programu w momencie jego uruchamiania, co wpływa na nadany mu priorytet przez jądro w porównaniu do innych procesów.
Załóżmy, że programista stworzył aplikację o nazwie Ackermann, która oblicza funkcje Ackermana. To wymagające obliczeniowo zadanie może obciążać procesor i pamięć. Programista może uruchomić go za pomocą polecenia:
./ackermann
Aby zobaczyć uruchomiony program, możemy użyć polecenia:
top
W widoku top możemy zobaczyć szczegóły dotyczące programu Ackermann. Wartość nice jest reprezentowana w kolumnie „NI” i wynosi zero, jak przewidywano.
Uruchomimy program ponownie, aby ustawić mu mniejszy priorytet. Możemy przypisać wartość nice równą 15, wykonując następujące polecenie. Wpisz nice, spację, -15, kolejną spację, a następnie nazwę programu:
nice -15 ./ackermann
Należy pamiętać, że „-15” nie oznacza liczby ujemnej. Wartość 15 jest dodatnia, a minus jest tylko sygnałem do systemu, że przekazujemy argument. Aby wskazać liczbę ujemną, używa się dwóch minusów.
Po ponownym uruchomieniu sprawdzimy, jak zmieniło się zachowanie programu Ackermann.
top
Przy wartości nice równej 15, program Ackermann nie zużywa najwięcej czasu procesora. To GNOME i Rhythmbox korzystają z większej ilości zasobów. Wkrótce zatrzymamy program Ackermann.
Teraz spróbujmy odwrotnej sytuacji i przypiszmy Ackermannowi ujemną wartość nice. Użyjemy dwóch znaków „-”. Aby uczynić aplikację bardziej samolubną, potrzebne będą uprawnienia superużytkownika. Każdy użytkownik może zwiększyć uprzejmość procesu, ale tylko administratorzy mogą nadać mu niższy priorytet.
sudo nice --10 ./ackermann
Sprawdźmy teraz, jakie zmiany zachodzą w wyniku tej operacji.
top
W tym przypadku Ackermann z wartością nice równą -10 zdobywa więcej czasu procesora, wznosząc się na szczyt listy procesów.
Funkcja renice
Polecenie renice umożliwia zmianę wartości nice dla już działającego procesu bez konieczności jego zatrzymywania. Możemy dostosować priorytety w locie.
W celu użycia renice potrzebujemy identyfikatora procesu (PID). Możemy go znaleźć w kolumnie „PID” w wyjściu polecenia top lub użyć polecenia ps i grep, aby go zlokalizować. Przy tym przykładzie, zamiast „dave”, należy użyć właściwej nazwy użytkownika oraz nazwy procesu.
ps -eu dave | grep ackermann
Gdy mamy już PID, możemy użyć go do polecenia renice. Zmniejszymy priorytet Ackermanna do bardziej uprzejmego poziomu, nadając mu nową wartość nice równą pięć. Należy pamiętać, że do zmiany wartości nice dla uruchomionego procesu wymagane są uprawnienia administratora. W parametrze 5 nie umieszczamy znaku „-” dla liczb dodatnich, podczas gdy dla wartości ujemnych używamy tylko jednego minusa.
sudo renice -n 5 2339
Otrzymujemy potwierdzenie, że wartość nice została zmieniona, pokazując zarówno starą, jak i nową wartość.
Jądro zazwyczaj radzi sobie doskonale z zarządzaniem priorytetami i alokacją zasobów procesora. Jednak w przypadku długoterminowych zadań, które nie wymagają natychmiastowego zakończenia, ustawienie wyższej wartości nice dla tych zadań może poprawić płynność działania systemu, co jest korzystne dla wszystkich użytkowników.
newsblog.pl