Bez względu na to którego systemu operacyjnego się używa czy Windows czy Linux, jest on w stanie obsłużyć jednocześnie wiele procesów; otwierając w systemie Windows okno Menadżera zadań, można zobaczyć jakie aplikacje są otwarte, uruchamiając te aplikacje system uruchamia jednocześnie wiele procesów wykonujących różne funkcje. Używają Linuksa, mamy znacznie większą kontrole nad każdym z tych procesów. W Linuksie istnieje możliwość tworzenia przez użytkownika procesów, zmiany ich priorytetów, oraz usuwania procesów. Można także – a jest to w programowaniu niezwykle istotne – skierować wynik z jednego procesu do innego procesu. Czym jest jednak proces, w jaki sposób go zdefiniować by jego funkcje w systemie operacyjnym były zrozumiałe ?
W najbardziej abstrakcyjnym sensie proces to każdy wykonywany program czy wykonywane polecenie. Kiedy wydajemy na przykład chyba najczęściej używane przez użytkownika polecenie ls to rozpoczyna się proces uruchamiający odpowiedni program w wyniku czego otrzymujemy rezultat wyświetlony na ekranie. W systemie w każdym momencie jego działania są wykonywane procesy, wywoływane nie tylko prze użytkownika, ale także procesy wywołane przez innych użytkowników i również procesy wykonywane przez sam system operacyjny Linux. Te ostatnie to często tzw. demony czyli usługi, które działają bez nadzoru użytkownika, zapewniające funkcje wykonywane przez system operacyjny. Demony mogą wykonywać funkcje drukowania, wysyłania poczty, monitorowania stanu działania systemu i wiele innych.
Polecenie - ps opcje - pozwala otrzymać informacje o odbywających się aktualnie w pamięci komputera, procesach. Jeżeli wykonujemy samo polecenie ps bez opcji to wtedy na ekranie ukazują się procesy użytkownika, który wykonał polecenie ps (na ekranie widzimy go w ostatniej linii).
$ ps
PID TTY TIME CMD
10804 pts/1 0:20 bash
3408 pts/1 0:00 vi
10804 pts/1 0:20 sed
5408 pts/1 0:00 ps
Ogólna postać polecenia ps ma następującą postać:
ps [ -opcja ] [ nazwa użytkownika ]
opcje:
-u → nazwa użytkownika pozwala wyselekcjonować procesy tego użytkownika dla wszystkich jego logowań
-e → wyświetla informacje o wszystkich aktualnie odbywających się procesach
-f → wyświetla, dla każdego procesu następujące informacje:
- nazwę użytkownika (UID)
- numer procesu (PID)
- numer ojca procesu (PPID)
- godzinę egzekucji procesu (STIME)
- imię komputera (TTY)
- czas egzekucji procesu (TIME)
-a → wyświetla procesy innych użytkowników
Przetestujmy polecenie ps z różnymi opcjami, w tym celu w linii poleceń wystukajmy
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 May18 ? 00:00:03 init
root 300 1 0 May18 ? 00:00:08 syslogd -m 0
daemon 327 1 0 May18 ? 00:00:00 /usr/sbin/atd
root 343 1 0 May18 ? 00:00:00 crond
root 359 1 0 May18 ? 00:00:03 inted
root 411 1 0 May18 ? 00:00:00 sendmail
root 444 1 0 May18 ? 00:00:00 httpd
piotr 11736 11731 0 13:45 pts/0 00:00:00 /bin/bash
piotr 11737 11732 0 13:45 pts/1 00:00:00 /bin/bash
piotr 11738 11733 0 13:45 pts/0 00:00:00 /bin/bash
Rezultat tego polecenia jest o wiele bogatszy od rezultatu polecenia ps bez opcji. Pojawiły się cztery nowe kolumny. Pierwsza z nich wskazuje identyfikator użytkownika skojarzonego z procesem. Trzecia kolumna to identyfikator procesu nadrzędnego, pokazuje on komu jest podporządkowany proces wywołany przez polecenie ps -ef . Z czwartej kolumny można dowiedzieć się, czy mamy do czynienia z zadaniem zaplanowanym (pojecie zadania wyjaśniamy w dalszej części rozdziału), a piąta kolumna pokazuje czas rozpoczęcia procesu. Zwracamy także uwagę, że na skutek użycia opcji - f, w kolumnie CMD widzimy całe polecenie – poprzednio widoczna była tylko jego pierwsza część. Najważniejsza informacja - szczególnie dla administratora systemu – zawarta jest w kolumnie trzeciej : jest to numer ojca procesu.
Co to jest „ojciec procesu” ? Co to jest „proces syna” ? Aby zrozumieć to pojecie musimy powrócić do samego pojęcia „procesu”. Jak pamiętamy proces to każdy wykonywany program czy wykonywane polecenie, czyli proces jest poleceniem lub programem który się toczy w trakcie ich wykonywania. Atrybuty procesy czyli parametry go definiujące przynależą do tego co nazywamy otoczeniem informatycznym do którego należą : dane zmienne, dane stałe (pojęcia te zostaną dokładniej omówione w rozdziałach omawiających programowanie) pliki przypisane wykonywanemu procesowi, zmienne itd. W najogólniejszym sensie proces syna jest procesem który został utworzony przez inny proces zwany procesem ojca.
Powłoka w której pracujemy - bash-shell – działa jako proces. Kiedy wydajemy – w linii poleceń -polecenie do wykonania, powłoka sprawdza czy może to zrobić bez żadnej pomocy z zewnątrz (np. czy nie musi nawiązać kontaktu z jadrem systemu operacyjnego). Jeśli powłoka nie potrafi wykonać polecenia lub programu, wywołuje inny proces, który się tym zajmie. Ten inny proces może być nazwany „synem powłoki”, która staje się jego ojcem (rodzicem).
Kiedy proces syn zakończy wykonywanie swego zadania, zwraca jego rezultat do procesu ojca, a następnie kończy swoje działanie. Ponieważ jak pamiętamy Linux to wielozadaniowy system operacyjny, każdy ojciec może mieć wielu synów. Jeśli proces syn nie potrafi samodzielnie wykonać wszystkich zleconych mu zadań (np. kompilacji edycji) może wywołać jeden lub więcej dodatkowych procesów, które sa w stosunku do niego procesami synami. W takiej sytuacji staje się on sam procesem ojca. Wynika z tego, że jeden proces może być jednocześnie procesem ojcem i procesem synem.
Dwa polecenia związane z poleceniem ps przedstawiają inne widoki procesów. Pierwsze z nich to polecenie pstree, które w graficzny sposób pokazuje relacje miedzy procesami. Procesy „synowie” są graficznie przedstawione pod procesami „ojcami” , widać też gdzie każdy proces należy – który proces jest ojcem który synem.
Drugim programem związanym z ps jest polecenie (narzędzie) top . Pokazuje on nie tylko bieżące procesy, ale pozostaje aktywny, stale aktualizuje wyświetlane informacje. Na górze ekranu widać informacje, od ilu dni system działa, jaka jest liczba użytkowników, statystyki dotyczące pamięci. Po uruchomieniu programu top można użyć następujące klawisze:
h → pomoc
q → wyjście z programu
s → zmiana opóźnienia miedzy aktualizacjami wyświetlanego ektanu (domyślnie jest to 5 sekund)
spacja → wymuszenie natychmiastowej aktualizacji
u → wyświetlenie informacji o procesach jednego użytkownika
Zarządzanie procesami i zadaniami Darmowy kurs Linux