MC, 13:25 piątek, 20.07.2012 r.
Ilustracja do artykułu: nice i renice Linux - Jak zmienić priorytet procesu?

nice i renice Linux - Jak zmienić priorytet procesu?

Każdy świadomy użytkownik systemów Linux powinien potrafić zarządzać priorytetami procesów, przydzielając tym samym mniejszą bądź większą moc obliczeniową procesora każdemu z nich (moc obliczeniową rozumiemy tutaj jako czas poświęcany przez procesor na dany proces). Jest zadanie bardzo proste, więc tym powszechniejsza powinna być jego znajomość. Przyjrzyjmy się więc poleceniom nice oraz renice.

Po co kontrolować priorytety procesów?

Posłużę się prostym przykładem, który na pewno spotkał każdego użytkownika komputera. Wyobraźmy sobie, że mam plik o pokaźnych rozmiarach i chcemy go przenieść na inną partycję, czy nośnik wymienny. Operacja taka zazwyczaj dość mocno obciąża procesor. W zależności od tego, czy chcemy, aby plik został przeniesiony jak najszybciej, czy może nie zależy nam na tym, powinniśmy ustalić odpowiednio niski lub odpowiednio wysoki priorytet dla takiego działania. Innym, a właściwie nawet lepszym przykładem, może być operacja kompresji dużego lub wielu plików.

Jakie mamy dostępne priorytety?

Priorytety przypisane do procesu mają numeryczną skalę rozpiętą od -20 do 19. Jak widać, jest to dość sporo, bo aż 40 stopni, przy czym -20 oznacza najwyższy priorytet, zaś 19 najniższy.

Jak sprawdzić priorytet procesu?

Aby otrzymać informacje na temat tego, jaki priorytet przypisany jest danemu procesowi, możemy uruchomić program:
top
albo jego bardziej rozbudowany odpowiednik:
htop

Jak uruchomić program przydzielając mu odpowiedni czas pracy procesora?

Aby uruchomić proces, przypisując mu jednocześnie zdefiniowany priorytet, należy posłużyć się poleceniem nice, które w najprostszej postaci ma składnię:
nice -n priorytet komenda_do_wykonania
Czyli przykładowo, jeśli chcemy jak najszybciej zaktualizować bazę z informacjami o występujących plikach w systemie plikach (w tym temacie polecam wpis: wyszukiwanie plików Linux), należy wydać polecenie updatedb przypisując mu największy czas obliczeniowy procesora (priorytet -20):
# nice -n -20 updatedb

Jak zmienić priorytet działającego procesu?

W przypadku, w którym nie chcemy tworzyć nowego procesu, a jedynie zmodyfikować priorytet już istniejącego, musimy na wstępie poznać numer Id tego procesu, czyli PID. Do tego również najwygodniej użyć programu top/htop. Dajmy na to, że nasz procesor obciążony jest przez działające procesy wirtualnej maszyny (PID 28422) oraz kompresora (np. tar; PID 28848), my zaś pilnie musimy wykonać jakąś inną operację wymagającą dużych nakładów procesora. Posłużmy się więc poleceniem renice, które pozwoli nam zmienić priorytet działających programów. Składnia tego polecenia jest bardzo podobna do nice:
renice -n priorytet -p PID_procesu [opcjonalnie więcej PID procesów, rozdzielonych spacją]
Co w naszym przykładzie będzie wyglądało następująco:
renice -n 19 -p 28422 28848

Zagadnienie proste, a niezwykle przydatne.

Komentarze (2)

Imię:
Treść:
Administrator 2018-01-21 12:56:19
@Randy, dziękuję za komentarz, aczkolwiek nie zgadzam się z nim. Cytowany fragment zdania odnosi się do ogólnego użycia polecenia renice i tuż pod nim przedstawiona jest jego składnia. Nie widzę więc powodu, by pisać tam o konkretnie o zmniejszaniu priorytetu.
Randy 2018-01-19 13:25:47
"które pozwoli nam zmienić priorytet działających programów" - oczywiście można się domyśleć, że chodzi o zmniejszenie priorytetu, co wynika z wcześniejszej treści, to lepiej zamiast "zmienić" napisać "zmniejszyć" Wtedy jest to jednoznaczne.