8 Procesy

8.1 Najważniejsze polecenia

ps

podaje informacje o działających procesach
Postać: ps [opcje]

Opcje polecenia ps moga byc podawane w różnej formie: poprzedzone myślnikiem (w stylu UNIX) np. ps -l, bez myślnika (styl BSD), np. ls aux lub poprzedzone dwoma myślnikami (styl GNU), np. ps --help. W razie niepewności zajrzyj do dokumentacji man ps.
Najważniejsze opcje:
-l wyświetla więcej informacji o procesach
-f format ekstra-pełny
-A lub -e wszystkie procesy
-U numer_użytkownika lub U, lub --user procesy uruchomione przez danego użytkownika
u format zorientowany na użytkownika (m.in. informacja o zajętości CPU i pamięci)
f wyświetl drzewo procesów

Przykład:
$ ps

PID TTY          TIME CMD
3873 pts/2    00:00:00 su
3875 pts/2    00:00:00 bash
3893 pts/2    00:00:00 tcsh
3899 pts/2    00:00:00 vim
3904 pts/2    00:00:00 ps

PID (ang. Process ID) jest liczbą jednoznacznie identyfikującą proces w systemie. TTY to nazwa terminala z którego zostało uruchomione polecenie CMD.

$ ps -l

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S  1002  3873  3211  0  76   0 -   710 wait   pts/2    00:00:00 su
0 S  1002  3875  3873  0  75   0 -  1271 wait   pts/2    00:00:00 bash
0 S  1002  3893  3875  0  75   0 -   908 rt_sig pts/2    00:00:00 tcsh
0 T  1002  3899  3893  0  78   0 -   997 finish pts/2    00:00:00 vim
0 R  1002  3945  3893  0  76   0 -   581 -      pts/2    00:00:00 ps

Oznaczenia: UID - numer użytkownika, PPID - numer procesu rodzica (procesu z którego wywodzi się dany proces), PRI - priorytet, NI - wartość parametru NICE ustawianego poleceniem nice

top

lista procesów w czasie rzeczywistym
Postać: top [opcje]
Polecenie top prezentuje listę działających procesów wraz z najważniejszymi informacjami na temat obciążenia systemu (zajętość pamięci i obciążenie CPU). Program udostępnia wiele skrótów klawiszowych pozwalających na sortowanie i filtrowanie listy procesów:

  • h

    wyświetla listę skrótów klawiszowych

  • k

    zabija wskazany proces

  • r

    zmienia parametr NICE wskazanego procesu

  • f

    wybór pól prezentujących informacje o procesach

  • q

    wyjście z programu

Polecenie:
$ top -u username
wyświetla listę procesów wskazanego użytkownika.

htop

lista procesów w czasie rzeczywistym
Postać: htop [opcje]
Jest to bardziej przyjazna dla użytkownika wersja programu top

pstree

wyświetla drzewo procesów
Postać: pstree [opcje]
Najważniejsze opcje:
-p dodaje numery PID
-H PID wyróżnia podany proces (-h aktualny proces)

kill

zabija proces
Postać: kill [-sygnal] PID...
Polecenie wysyła sygnał do procesu o numerze PID. Jeżeli nie sprecyzujemy rodzaju sygnału wówczas kill wysyła sygnał SIGINT przerywający działanie procesu.
Opcja -l wyświetla listę sygnałów jakie można przesłać do procesów (więcej na ten temat w dokumentacji man 7 signal)
Najważniejsze sygnały:
2 SIGINT przerwanie procesu (ten sygnał jest wysyłany do procesu gdy wciśniemy Ctrl+C)
9 SIGKILL sygnał “zabicia” procesu
19 SIGSTOP zawieszenie procesu (Ctrl+Z)
18 SIGCONT wznowienie zatrzymanego procesu
$ kill -9 3899
wysyła sygnał KILL o numerze 9 do podanego procesu
$ kill -9 -1
wysyła sygnał KILL do wszystkich procesów (uwaga: spowoduje wylogowanie, gdyż zamknięty zostanie także proces powłoki)
$ kill -SIGSTOP 4008
zawiesza działanie procesu
$ kill -18 4008
wznawia działanie zawieszonego procesu
Wbudowane w powłokę Bash polecenie kill umożliwia dodatkowo wysyłanie sygnałów do procesów identyfikowanych za pomocą numeru zadania JID (zobacz polecenie jobs)

killall

zabija procesy o podanej nazwie
Postać: killall [-s sygnal] nazwa ...
Przykład:
$ killall sleep

pgrep

wyświetla numery PID procesów pasujących do wzorca
Postać: pgrep [opcje] wyrażenie
Najważniejsze opcje:
-u użytkownik zawęża wyniki tylko do procesów danego użytkownika.
-l dodaj informację o nazwie procesu
Przykład:
$ pgrep -u marek sleep
wyświetli numery procesów uruchomionych przez użytkownika marek zawierających w nazwie sleep.
$ kill -9 $(pgrep -u marek sleep)
wyśle syknał SIGKILL do procesów uruchomionych przez użytkownika marek zawierających w nazwie sleep.

pkill

wysyła sygnał do procesów o nazwach pasujących do wzorca
Postać: pgrep [-sygnał] [opcje] wyrażenie
Polecenie to rozszerza działanie pgrep o możliwość wysłania sygnału do pasujących procesów.
Przykład:
$ pkill -9 -u marek sleep
wyśle sygnał SIGKILL do procesów uruchomionych przez użytkownika marek zawierających w nazwie sleep.

jobs

podaje status procesów uruchomionych w bieżącej powłoce
Postać: jobs [-l]
Przykład:
$ jobs

[1]-  Done                    sleep 100
[2]+  Stopped                 vim

W nawiasie kwadratowym podany jest numer zadania JID (ang. Job ID), obok stan procesu (zatrzymany, uruchomiony, itp.).
Opcja -l wyświetla dodatkowo PID procesu.

bg

uruchamia zawieszone zadanie w tle
Postać: bg [JID…]

Gdy nie podano numery zadania to wznawiane jest ostatnio zawieszone zadanie.
Przykład wznowienia zadania o numerze JID 2:
$ bg %2

fg

uruchamia zatrzymane zadanie na pierwszym planie
Postać: fg [JID]
Przykład:
$ fg %2
spowodowałoby przeniesienie programu vim z poprzedniego przykładu na pierwszy plan

nice

uruchamia program z zadanym priorytetem (zwiększoną łagodnością)
Postać: nice -priorytet [opcje] polecenie
Przykład:
$ nice -19 emacs
uruchomi program emacs z parametrem NICE równym 19. Im większa wartość NICE tym mniej zasobów będzie pochłaniało wykonanie procesu, czas jego trwania ulegnie wydłużeniu dając pierwszeństwo procesom z mniejszym priorytetem. Domyślnie procesy uruchamiane są z łagodnością 0. Maksymalna wartość tego parametru w wielu systemach Linux to 19. Wartości od -1 do -19 zarezerwowane są dla administratora (pozwalają uruchomić proces o zwiększonym priorytecie)

renice

pozwala zwiększyć priorytet działającego procesu
Postać: renice priorytet [PID] [-u użytkownik]
Opcja -u pozwala zmienić priorytet wszystkich działających procesów dla wskazanego użytkownika.
Przykład:
$ renice 19 4343 -u student
zwiększy priorytet (parametr NICE) do 19 procesu o numerze PID 4343 oraz wszystkim procesom uruchomionym przez użytkownika student .
Ze względów bezpieczeństwa tylko administrator może zmniejszać wartość parametru NICE procesów, zwykli użytkownicy mogą wyłącznie zwiększać ten parametr.

at

uruchamia proces o zadanym czasie
Postać: at [-f plik] CZAS
Polecenie lub lista poleceń do uruchomienia wczytywana jest ze standardowego wejścia, lub po opcji -f możemy podać nazwę pliku w który zawarta jest lista poleceń do uruchomienia. CZAS może być wyrażony w wielu formach (po szczegóły zajrzyj do podręcznika man at). Wynik działania polecenia wysyłany jest do skrzynki pocztowej użytkownika. Przykład:
$ at 10:21 -f plik
spowoduje uruchomienie poleceń zawartych w pliku plik o godzinie 10.21
$ echo ls | at now +1minutes
spowoduje uruchomienie polecenia ls dokładnie za minutę

atq

wyświetla listę zadań ustawionych do wykonania za pomocą polecenia at
Postać: atq

atrm

usuwa z kolejki zadanie o podanym numerze
Postać: atrm numer_zadania

crontab

program zarządzający tabelami demona cron, który służy do wykonywania zaplanowanych w czasie operacji
Postać: crontab [-e|-l|-r]
-Opcje:
--e edycja tabeli zadań
--r usunięcie bieżącej tabeli zadań
--l wyświetla bieżącą tabele zadań
–Tabela zadań powinna zawierać w każdej linii wpis następującej postaci:

MINUTY GODZINY DNI MIESIACE DNI_TYGODNIA polecenie
gdzie MINUTY to liczba z zakresu 0-59, GODZINY - liczba z zakresu 0-23, DNI - liczba z zakresu 1-31, MIESIACE od 1 do 12, DNI_TYGODNIA od 1 do 7. Użycie gwiazdki * zamiast liczy oznacza dowolną wartość.
Przykładowa tabela zadań:

30   18   *   *       *      rm -f ~/tmp
30   0    1   1,6,12  *   mail student@fizyka.umk.pl < wiadomosc.txt

Powyższy zapis oznacza, że codziennie o godzinie 18:30 wykonywana jest komenda usuwająca katalog /tmp, zaś 30 minut po północy w pierwszy dzień stycznia, czerwca i grudnia wysyłany jest za pomocą poczty elektronicznej plik wiadomosc.txt do podanego użytkownika. Więcej szczegółów w podręczniku demona cron i polecenia crontab.

nohup

uruchamia polecenie, które nie zostanie przerwane w momencie wylogowania
Postać: nohup polecenie
Przykład:
$ nohup sleep 1000 &

fuser

identyfikuje procesy używające plików lub gniazd sieciowych
Postać: fuser [opcje] plik...
Polecenie fuser wyświetla listę numerów procesów PID, które wykorzystują w danym momencie wskazany plik, system plików lub gniazdo sieciowe.
Najważniejsze opcje:
-k zabij procesy zamiast wypisywać ich numery PID
-u podaj nazwę właściciela procesu wraz z numerem PID
-v wyświetl więcej szczegółów na temat procesów
Przykład:
$ fuser /home
wypisze numery procesów używających plików w katalogu /home

timeout

uruchamia program z ograniczeniem czasowym
Postać: timeout czas_trwania polecenie
Czas trwania polecenia to liczba sekund.
Przykład:
$ timeout 10 top
uruchomi polecenie top, które po 10 sekundach zakończy swoje działanie.
Czas trwania można również wyrazić w innych jednostkach dodając odpowiedni przyrostek do liczby podanej w argumencie polecenia, gdzie s - sekundy, m - minuty, h - godziny, d - dni.
$ timeout 1m top
uruchomi top na czas jednej minuty.

watch

powtarza uruchomienie programu z określoną częstością
Postać: watch [opcje]polecenie
Domyślnie program uruchamiany jest co 2 sekundy a wynik działania jest odświeżany na terminalu, dzięki czemu możliwe jest monitorowanie zmian wyniku polecenia. Monitorowanie trwa bez końca, aby przerwać działanie należy wcisnąć Ctrl+C
Przykład:
$ watch ls -lt
wyświetla co 2 sekundy aktualną zawartość bieżącego katalogu z plikami umieszczonymi w kolejności czasu modyfikacji.
Opcje:

  • -n

    pozwala określić interwal odświeżania (czas w sekundach)

  • -d

    wyróżnia różnice jakie zachodzą w wyjściu programu wyróżniane

time

dokonuje pomiaru czasu działania procesu
Postać: time polecenie
Po zakończeniu działania polecenia wyświetlane są wartości czasu rzeczywistego (real), systemowego (sys) i użytkownika (user) zajęte przez proces.
$ time sleep 1

real 0m1.002s
user 0m0.002s
sys 0m0.000s

Inne przydatne polecenia: iotop, pidof, lsof