lab8 2 id 260250 Nieznany

background image

1

Politechnika Krakowska im. T. Kościuszki

INSTYTUT INFORMATYKI STOSOWANEJ

Środowisko LINUX - Procesy w systemie Unix

Systemy
Operacyjne

LABORATORIUM

2 x 45min

1. Cel

Celem niniejszego ćwiczenia jest zaprezentowanie podstawowych zagadnień związanych z
procesami w systemie Unix.

2. Wstęp


Unix jest systemem wielozadaniowym, co oznacza, że wiele procesów wykonuje się
pozornie jednocześnie. Pozorność ta polega na tym, że jądro systemu udostępnia kolejno
poszczególnym procesom czas procesora na krótkie (milisekundowe) okresy i tak naprawdę
w danej chwili wykonuje się tylko jeden proces. Każdy proces ma swój unikalny w zakresie
całego systemu numer identyfikacyjny zwany PID (ang. process identification number).
Oprócz numeru PID każdy proces (z jednym wyjątkiem) ma numer PID swojego rodzica -
tzw. PPID (ang. parent PID), czyli numer PID procesu, przez który został uruchomiony.
Jedynym procesem, który nie ma swojego rodzica, jest proces o nazwie init, który jest jako
pierwszy uruchamiany po starcie systemu operacyjnego. Proces init jest przodkiem
wszystkich innych procesów.

3. Wyświetlanie informacji o procesach

Do wyświetlania informacji o procesach działających aktualnie w systemie służy polecenie
ps

. Polecenie ps ma wiele opcji. Pełen opis tego polecenia można uzyskać wpisując

polecenie man ps. Aby wyświetlić pełną listę wszystkich działających w systemie procesów,
wykonaj w okienku terminala polecenie

ps

-ef

Prawdopodobnie lista ta będzie dłuższa niż liczba linii terminala. Aby wyświetlić tę listę z
podziałem na strony, wpisz polecenie

ps -ef | more

Znaczenie poszczególnych kolumn jest następujące:

UID

- nazwa użytkownika (właściciela procesu)

PID

- numer identyfikacyjny procesu

PPID

- numer PID rodzica danego procesu

C

- miara obciążenia procesora

STIME

- czas rozpoczęcia działania procesu

TTY

- nazwa terminala związanego z procesem

TIME

- czas wykorzystania procesora

CMD

- komenda, która wywołała proces

2

Zauważ, że właścicielem wielu procesów w systemie jest użytkownik o nazwie root. Znaczy
to, że procesy te są procesami systemowymi bądź zostały uruchomione przez administratora
systemu. Aby wyświetlić wszystkie procesy tylko jednego użytkownika, wpisz polecenie

ps -fu

nazwa_użytkownika

4. Zadania (ang. jobs)

Obok pojęcia procesu, kolejnym ważnym pojęciem w systemie unix jest zadanie (ang. job).
Zadanie jest to proces, który został uruchomiony przez wywołanie komendy z danego
terminala. Przykładowo, aby uruchomić edytor tekstowy vi, wpisz w terminalu komendę:

vi

Spowodowało to utworzenie nowego zadania związanego z danym terminalem. Zostało
otworzone okienko edytora. Zauważ, że działanie terminala, z którego wywołano vi zostało
zawieszone do czasu zakończenia zadania vi.

Można jednak przywrócić działanie terminala poprzez uśpienie działania edytora. Aby tego
dokonać, w aktywnym okienku terminala wciśnij kombinację klawiszy CTRL-Z.

Z poziomu terminala można uruchamiać zadania działające w tle, tzn. takie, których działanie
nie powoduje zawieszenia działania terminala. Do uruchamiania zadań w tle służy symbol
"&" umieszczany na końcu polecenia. Aby uruchomić w tle program pico, wpisz polecenie

pico &

Otworzy się okienko programu pico. Zauważ, że teraz zarówno terminal jak i okienko
programu pico są aktywne, czyli terminal i program Midnight Commander działają
równolegle. Aby wyświetlić informacje o wszystkich związanych z danym terminalem
zadaniach, wpisz polecenie:

jobs

Pierwsza linijka oznacza, że zadanie vi ma numer 1, a druga linijka oznacza, że zadanie
pico

ma numer 2. „suspended” oznacza że oba procesy są uśpione, czyli nie wykonują

żadnych działań do momentu ich wywołania za pomocą komendy:

fg %numer_zadania

Komenda ta służy do przeniesienia procesu do tzw. „foreground”, czyli naszej konsoli wraz z
ekranem. Istnieje także pojęcie „background” i oznacza ono pracę programu w tle. Opcję
przeniesienia procesu do „background’u” realizujemy za pomocą komendy:

bg %

numer_zadania

Spróbujmy obudzić zadanie 2 i przenieść je na konsolę komendą:

fg %

2

Znaleźliśmy się w programie pico. Teraz opuszczamy go za pomocą kombinacji klawiszy
CTRL+X (^X), a następnie wykonujemy komendę

background image

3

( date; sleep 60; date ) > data &

Komenda ta pozwoli nam obejrzeć proces przeniesiony w tło (background), ale aktywny –
wykonujący działanie. Komenda ma za zadanie wypisać datę do pliku data odliczyć do 60
sekund, po czym znowu wpisać datę. Jeśli wykonamy teraz polecenie:

cat

data

To okaże się, że znajduje się tam jedna linia z aktualną datą i godziną. Po upływie minuty
wykonanie tego polecenia da nam dwie linie. Wywołanie komendy jobs po drugim wpisie

pokaże nam tylko vi (druga komenda zakończyła swoje zadanie). Spróbujmy wykonać teraz
tę samą komendę co poprzednio, ale bez wysyłania go w tło:

( date; sleep 600; date; ) > data2

Po czym uśpijmy go za pomocą kombinacji klawiszy CTRL+Z (^Z). Wywołajmy listę
zadań za pomocą jobs, a następnie wpiszmy cat data2. Widzimy, że w odróżnieniu do

poprzedniego sposobu teraz nasz program jest uśpiony, a nie uruchomiony. Znajduje się
więc w tle jednak jego działanie zostało wstrzymane. Spróbujmy przywrócić go do stanu
running. Musimy przenieść te zadanie do backround’u:

bg %

2

Wywołanie teraz listy procesów pokaże nam wznowiony proces pozwalając mu wykonywać
zadania. Możemy także obejrzeć jego działanie poprzez przesunięcie go do foreground’u:

fg %

2

Proces przerywamy kombinacją klawiszy CTRL+C. Używając komend ps -ef | more
lub ps -fu

nazwaużytkownika

wyszukaj procesy vi i pico. Zauważ, że są one związane

z tym samym terminalem (kolumna TTY).

4. Polecenie kill

Do zmiany stanu zadania lub procesu służy polecenie kill. Ma ono wiele wariantów. Aby
zatrzymać (zawiesić) zadanie używamy polecenia kill -STOP z numerem zadania
poprzedzonym znakiem "%". Aby zatrzymać zadanie nr 2 (czyli program pico), wpisz
polecenie

kill -STOP %

2

Aby sprawdzić, w jakim stanie są zadania, wpisz polecenie

jobs

Stan "suspended (signal)" oznacza, że zadanie zostało zawieszone przy użyciu polecenia
kill

. Sprawdź, że program pico został zawieszony, co objawia się np. tym, że przestał

reagować na wciśnięcia przycisków. Aby zabić dane zadanie, (czyli spowodować
bezwarunkowe zakończenie jego wykonywania) należy użyć polecenia kill -9 z numerem
zadania poprzedzonym znakiem %. W celu zabicia zadania nr 1 (czyli programu vi) wpisz

kill -9 %

1

4

Aby się przekonać, że zadanie vi zostało zakończone, możesz obejrzeć aktualną listę
zadań, wpisując polecenie:

jobs

Identyczne efekty można uzyskać używając numeru PID procesu zamiast numeru zadania
poprzedzonego symbolem "%". Możesz również używając polecenia ps -ef | more lub
ps -fu

nazwaużytkownika

przekonać się, że proces vi przestał istnieć w systemie. W

ramach samodzielnych eksperymentów, stwórz nowe zadania i przetestuj na nich działanie
poleceń kill -STOP oraz kill -9 użytych z numerem PID procesów. W systemach
unixowych zwykły użytkownik (nie będący administratorem) może manipulować jedynie
procesami, które do niego należą.

5. Procesy potomne

Tak jak już na początku niniejszej instrukcji napisano, każdy proces ma, oprócz własnego
numeru PID, numer PPID - tj. numer PID procesu rodzica, czyli procesu, przez który został
wywołany. W systemach unixowych zakończenie działania danego procesu powoduje
zakończenie działania wszystkich jego procesów potomnych.

bash

&

Powłoka bash jest innym typem terminala i można z niego korzystać w niemal identyczny
sposób jak z terminala, którego używaliśmy do tej pory. W tej chwili mamy otworzone na
pulpicie dwa terminale. Aby uniknąć nieporozumień, terminal, którego używaliśmy do tej pory
będziemy nazywać "standardowym". Aby uruchomić edytor vi jako proces potomny
względem terminala bash, wpisz w oknie terminala bash polecenie:

vi

Powinno się pojawić okienko edytora. Przejdź do terminala standardowego. Używając
poleceń ps -ef | more lub ps -fu

nazwaużytkownika

odszukaj procesy bash oraz vi.

Porównując numery PID i PPID procesów zauważ, że rodzicem Twojego procesu vi jest
pewien proces o nazwie zsh - jest to interpreter poleceń. Rodzicem tego procesu zsh jest
natomiast Twój proces bash. Oznacza to, że Twój proces vi jest potomkiem drugiego
pokolenia procesu bash. Przekonaj się teraz, co się stanie z procesem vi, gdy proces bash
zostanie zabity. W tym celu, aby się dowiedzieć, jaki jest numer zadania związanego z
terminalem bash, w terminalu standardowym wpisz polecenie

jobs

Oznacza to, że zadanie bash ma numer 1. Zabij więc to zadanie poleceniem

kill -9 %

1

Uwaga: W praktyce, zakańczanie działania programów za pomocą polecenia kill -9
stosuje się jedynie w sytuacja awaryjnych. Instalacja edytora nano:

ftp://ftp.cac.washington.edu/pine/pine-4.64-1.i386.rpm; # rpm –ivh --force
--nodeps pine-4.64-1.i386.rpm


Wyszukiwarka

Podobne podstrony:
lab8(1) id 260269 Nieznany
lab8 3 id 260253 Nieznany
Lab 8 lab8 id 749787 Nieznany
lab8(1) id 260269 Nieznany
Lab8 occ id 260283 Nieznany
Lab8 occ id 260283 Nieznany
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany
metro sciaga id 296943 Nieznany
perf id 354744 Nieznany
interbase id 92028 Nieznany
Mbaku id 289860 Nieznany
Probiotyki antybiotyki id 66316 Nieznany
miedziowanie cz 2 id 113259 Nieznany
LTC1729 id 273494 Nieznany
D11B7AOver0400 id 130434 Nieznany
analiza ryzyka bio id 61320 Nieznany

więcej podobnych podstron