SPACJA BSP
9.3 Badanie stanu procesów
9.4.2 Sterowanie wykonywaniem procesów
Istnieją dwa sposoby realizacji procesów w systemach *N*X, róŜniące się uzaleŜnieniem od interakcji z uŜytkownikiem.
Pierwszy z nich nosi nazwę trybu pierwszoplanowego (ang. foreground mode), a proces wykonywany w takim trybie – procesu pierwszoplanowego (ang.
fore-groud process). W trybie tym proces posiada bezpośredni dostęp do terminala,
za pośrednictwem którego uŜytkownik steruje zadaniem wydając polecenia, wprowadzając dane wejściowe, zapoznaje się z uzyskiwanymi danymi
wyj-ściowymi oraz poznaje i reaguje na komunikaty wykonywanych programów i samego systemu operacyjnego.
Sposób drugi nazywa się trybem drugoplanowym lub trybem tła (ang.
backgro-und mode), a proces wykonywany w takim trybie – procesem drugoplanowym
lub procesem tła (ang. background process). W trybie tym proces nie korzysta z terminala, a odpowiednie dane wejściowe uzyskuje z plików, potoków poleceń lub łączy międzyprocesowych. Podobne są teŜ miejsca, do których wyprowa-dzane są dane wyjściowe. Wynika z tego, Ŝe proces tła nie reaguje na klawiatu-rę terminala ani nie wyprowadza na terminal Ŝadnych komunikatów.
Utworzenie procesu przez uŜytkownika następuje w wyniku skierowania do systemu polecenia do wykonania, tj. wprowadzenia jego nazwy, opcji i parame-trów oraz zatwierdzenia klawiszem <Enter>. Jeśli bezpośrednio przed uŜyciem <Enter> zostanie umieszczony znak spółki &, to zostanie podjęta próba wyko-nania tego polecenia jako procesu tła. Próba powiedzie się, jeśli do wykowyko-nania polecenia nie będzie potrzebny kontakt z terminalem. Jeśli bezpośrednio przed znakiem <Enter> nie będzie znaku spółki, to będzie ono wykonywane jako proces pierwszoplanowy.
Tabela 25. Zapis a sposób realizacji poleceń powłoki
Postać polecenia Sposób realizacji polecenia polecenie <Enter> proces pierwszoplanowy
polecenie & <Enter> proces drugoplanowy
W systemie operacyjnym procesy pierwszo- i drugoplanowe tworzą dwa rozłączne zbiory, z tym Ŝe liczba procesów pierwszoplanowych nie moŜe być większa niŜ jeden. Proces tła moŜe zostać przeniesiony do zbioru procesów pierwszoplanowych, a następnie ponownie skierowany do wykonywania w tle. Podobnie, dłuŜej trwające zadanie pierwszoplanowe niekorzystające z terminala moŜna przenieść do tła. Do zarządzania procesami tła potrzebny jest jednak me-chanizm ich identyfikacji, określony w tabeli dalej.
Identyfikator
zadania tła Znaczenie identyfikatora
%n Numer zadania o nazwie rozpoczynającej się ciągiem znaków n
%1 Numer pierwszego zadania tła
%% %+
Numer bieŜącego zadania (tj. ostatniego przeniesionego do zbioru zadań tła lub zadania zatrzymanego na pierwszym pla-nie)
%- Numer poprzedniego zadania tła
Identyfikator zadania tła jest podawany w nawiasach kwadratowych po utwo-rzeniu zadania. Numeracja ta nie ma nic wspólnego z identyfikatorami PID pro-cesów i jest odrębna dla kaŜdej otwartej sesji.
W kolejnym przykładzie przeszukamy cały system plików w poszukiwaniu pli-ków o nazwach rozpoczynających się od aqq. Wynik poszukiwania i komunika-ty diagnoskomunika-tyczne skierujemy do pliku aqq.lst.
$ find / -name aqq* -print >aqq.lst 2>&1 & [1] 4636
$
Rys. 145. Uruchomienie procesu w tle
PoniewaŜ zapis polecenia został zakończony znakiem spółki, zostało ono uru-chomione w tle. Nadano mu PID = 4636 i numer zadania tła równy 1. Jeśli pro-cesów tła jest więcej niŜ jeden, to w komunikatach dotyczących ich stanu po zamykającym nawiasie kwadratowym umieszczany jest dodatkowy znak: plus + wskazuje proces bieŜący (ostatnio uruchomiony), minusem - są zaś oznaczo-ne wszystkie pozostałe procesy.
Do sterowania zadaniami stosuje się polecenia określone w sposób następujący:
Tabela 26. Polecenia sterowania zadaniami
Polecenie Funkcja polecenia
%k
fg %k Przeniesienie zadania tła numer k na pierwszy plan
%k & bg %1
Przeniesienie zadania pierwszoplanowego do zadań tła jako zadanie numer k
^Y Zawieszenie bieŜącego (ostatniego) procesu, gdy będzie on chciał czytać dane z terminala
^Z Natychmiastowe zawieszenie bieŜącego (ostatniego) procesu
PoniŜszy przykład zawiera uruchomienie długo działającej pętli jako za-dania tła. Proces ten jest w pewnej chwili przenoszony do zadań pierwszopla-nowych, a następnie zatrzymywany (komunikat Stopped) i przenoszony do zadań tła. Po pewnym czasie proces zgłasza swoje zakończenie komunikatem Done.
$ cat >testrap <<EOF
> trap 'echo Odebrano sygnal INT.' exit 1; 1 > for (( i=1; i<1000000; i++ )); do i=$i; done > EOF $ . ./testrap & [1] 1470 $%1 . ./testrap ^Z [1]+ Stopped . ./testrap $ %1 & [1]+ . ./testrap & (czekanie ...) [1]+ Done . ./testrap $
Rys. 146. Zmiany trybu realizacji procesu
Wykaz procesów tła moŜna uzyskać za pomocą polecenia jobs. jobs [-lrs]
jobs Polecenie jobs (od ang. jobs – zadania) wyświetla wykaz procesów
tła uruchomionych w danej sesji. Opcja –l włącza wyświetlanie identyfikatorów procesów. Opcja –r ogranicza listę do procesów działających, opcja –s zaś – do procesów zawieszonych.
Przykład poniŜej ilustruje róŜnicę w formacie wykazu wyświetlanego przez po-lecenie jobs.
[root@vhomer log]# yes >/dev/null & [root@vhomer log]# jobs
[1]+ Running yes >/dev/null & [root@vhomer log]# jobs -l
[1]+ 3811 Running yes >/dev/null & [root@vhomer log]#
Wykorzystano polecenie yes, które na standardowe wyjście wypisuje bez koń-ca zadany ciąg znaków (domyślnie „yes”). W przykładzie wyjście zostało przekierowane do systemowej „czarnej dziury”.
Do zbioru procesów drugoplanowych naleŜą teŜ tzw. demony (ang.
da-emons). Demon jest uaktywniany do wykonania usługi, dla której został
opra-cowany, a po jej zrealizowaniu przechodzi w stan oczekiwania na następne we-zwanie. Nazwy demonów z reguły kończą się literą „d”, np. atd, crond, ftpd, sshd, xinetd.
W sytuacji, gdy liczba wykonywanych procesów jest większa niŜ liczba dostępnych procesorów (a jest to sytuacja typowa), procesy konkurują pomię-dzy sobą o przydział czasu procesora. Zasady tej konkurencji obejmują tzw. priorytety (ang. priorities) - proces o wyŜszym priorytecie ma większą szansę na otrzymanie przydziału czasu procesora. W systemach *N*X priorytety ozna-czane są liczbami całkowitymi, przy czym wartość -20 (ujemna) oznacza naj-wyŜszy priorytet, a wartość 19 (dodatnia) – najniŜszy. Wartością średnią jest ze-ro. Za pomocą polecenia nice uŜytkownik moŜe uruchomić proces z prioryte-tem innym niŜ domyślny. Priorytet, odziedziczony od procesu macierzystego (w tym nice), moŜe być zmieniony poleceniem renice.
nice [[-n] przyrost] [polecenie [argument]
…
]nice
Polecenie nice (od ang. nice – ładny, miły) uruchamia wskazane
polecenie z jego argumentami (o ile zostały podane), nadając utwo-rzonemu w ten sposób procesowi priorytet równy wartości prioryte-tu domyślnego (tj. prioryteprioryte-tu procesu macierzystego) powiększonej o przyrost. Wartość parametru przyrost moŜe być dodatnia (wtedy wynikowy priorytet będzie niŜszy niŜ domyślny) lub ujemna (wtedy wynikowy priorytet będzie wyŜszy niŜ domyślny). Domyśl-ną wartością przyrostu jest 10. Ujemny przyrost moŜe podać tyl-ko superuŜyttyl-kownik.
Polecenie wydane bez parametrów wyświetla priorytet domyślny.
renice priorytet [[-p] PID
…
] [[-g] GPID…
] [[-u] UID…
]renice Polecenie renice ustala nowy priorytet według wartości podanej jako priorytet dla procesów identyfikowanych przez ich PID, grup procesów identyfikowanych przez ich GPID lub uŜytkowni-ków identyfikowanych przez ich UID. Zwykły uŜytkownik moŜe tylko zmniejszyć priorytet procesu.
$ nice -5 yes >/dev/null & [1] 4241
$ jobs -l
[1]+ 4241 Running nice -5 yes >/dev/null & $ renice 11 4241
4241: old priority 5, new priority 11 $ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 501 3956 3955 0 76 0 - 1166 wait pts/2 00:00:00 bash 0 R 501 4241 3956 98 96 11 - 902 - pts/2 00:00:17 yes 0 R 501 4245 3956 0 78 0 - 1110 - pts/2 00:00:00 ps $
Jaki priorytet?
1. Zapamiętaj: wyŜszemu priorytetowi odpowiada mniejsza liczbowa wartość priorytetu.
2. Przy zmianie priorytetów procesów naleŜy zachować daleko idącą ostroŜność. Znaczne ich modyfikacje mogą doprowadzić do częścio-wej lub całkowitej blokady systemu.
Wykonanie następnego polecenia powłoki moŜna wstrzymać o wskazaną liczbę jednostek czasu; słuŜy do tego polecenie sleep.
sleep liczba[smhd]
…
sleep
Polecenie sleep (od ang. sleep – śpij) wstrzymuje powłokę przed
wykonaniem następnego polecenia na czas określony przez sumę wartości parametrów. Litera umieszczona bezpośrednio po liczbie oznacza jednostkę czasu: s – sekundy, m – minuty, h – godziny i d – dni.
Przykładowo, polecenie sleep 1m 10s oznacza wstrzymanie interpretacji następnego polecenia przez okres 1 minuty i 10 sekund, tj. łącznie przez czas 70 sekund.