• Nie Znaleziono Wyników

Sterowanie wykonywaniem procesów

W dokumencie System *N*X (Stron 175-179)

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.

W dokumencie System *N*X (Stron 175-179)