lab9 3 id 260337 Nieznany

background image

Politechnika Krakowska im. T. Kościuszki

INSTYTUT INFORMATYKI STOSOWANEJ

Środowisko LINUX – Zarządzanie procesami w systemie Unix cz. II

Systemy
Operacyjne

LABORATORIUM

2 x 45min

1. Cel

Celem niniejszego ćwiczenia jest zaprezentowanie podstawowych zagadnień związanych z
automatycznym, planowanym uruchamianiem procesów w systemie Linux/Unix.

2. Wstęp


Unix jest systemem wielozadaniowym, co oznacza, że wiele procesów wykonuje się
pozornie jednocześnie. Polecenia wydawane z klawiatury są wykonywane według kolejności
ich wprowadzania, jako procesy pierwszoplanowe, czyli w sposób asynchroniczny.
Wykonywanie takiego polecenia musi zostać zakończone, zanim rozpocznie się
wykonywanie następnego polecenia. Umieszczanie poleceń w tle pozwala wykonywać je w
sposób synchroniczny.
Po zakończeniu sesji przy terminalu wszystkie procesy w tle są przerywane. Nie
dotyczy to jednak procesów zleconych do wykonania poleceniami at, batch i nohup.
Wykonywanie procesów uruchomionych w ten sposób nie wymaga obecności
użytkownika w systemie.

3. Uruchamianie procesów (polecenia at, batch, nohup)


Po umieszczeniu polecenia (lub kilku poleceń) w tle, można w dalszym ciągu wykonywać
polecenia w pierwszym planie, nawet, jeśli wykonywanie poleceń w tle nie zostało jeszcze
zakończone. Polecenie umieszcza się w tle podając na jego końcu znak &.

3.1. Zlecanie zadań o określonej porze (polecenie at)

UWAGA: Jeżeli ćwiczenia są wykonywane w innym systemie niż Knoppix, to uruchamianie
poleceń at i batch wymaga przydzielenia uprawnień przez administratora. Nadanie
uprawnień polega na dopisaniu nazwy użytkownika uprawnionego do wykonywania tych
poleceń do pliku /usr/lib/cron/at.allow lub usunięciu nazwy użytkownika z pliku
/usr/lib/cron/at.deny

.

Aby zlecić wykonanie zadania:
• sprawdź aktualny czas systemowy.
• wpisz polecenie at [teraz+2 minuty] i naciśnij Enter (teraz oznacza czas systemowy
wyświetlony w poprzedniej czynności).
• wpisz polecenie mkdir at1 i naciśnie Enter.
• wciśnij ^D (Ctrl-D)

Zaczekaj dwie minuty i sprawdź czy został utworzony katalog at1.

Jaka jest data utworzenia katalogu?

background image


W jakim katalogu został utworzony katalog at1?

Zleć do wykonania następujące zadania (zanotuj numery przydzielane zadaniom):
• za 2 minutu ls –l >at2
• za 10 minut mkdir at3
• za 20 minut ls
• za 40 minut find / -name „at” –print > at5

Aby wyświetlić listę zadań oczekujących na wykonanie:
• wpisz polecenie at –l i wciśnij Enter.
• wpisz polecenie atq i wciśnij Enter.

Aby usunąć zlecone zadanie:
• wpisz polecenie at –l i wciśnij Enter.
• określ numer zadania do usunięcia.
• wpisz polecenie at –d <numer zadania> i wciśnij Enter.

W podobny sposób jak polecenie at działa polecenie batch z tą różnicą, że proces nie jest
wykonywany w zadanym czasie, tylko w momencie małego obciążenia systemu.

3.2. Zlecanie zadań o określonej porze (polecenie batch)

Powtórz zadania używając polecenia batch zamiast at.

Jakie były różnice?

3.3. Wykonywanie zadań po wylogowaniu (polecenie nohup)


Utwórz plik s1 zawierający poniższy skrypt i nadaj mu prawo wykonywania:

#!/bin/bash
while true
do

echo $0 - `date`

sleep

15

done

UWAGA: Zwróć uwagę na znaki ` w poleceniu echo. Są to znaki akcentu (na klawiaturze
obok cyfry 1) a nie apostrofy (na klawiaturze obok litery L).

Uruchamianie zadania w tle i wylogowanie się.
Aby uruchomić zadanie:
• wpisz polecenie nohup ./s1 & i wciśnij Enter.
• zaczekaj i upewnij się, że co 15 sekund na ekranie pojawia się aktualny czas i data.
• wpisz polecenie ps –ef i wciśnij Enter.
• zanotuj PPID powłoki wykonującej skrypt s1.
• wpisz polecenie exit i wciśnij Enter.
• zaczekaj i sprawdź czy aktualny czas i data nadal pojawiają się na ekranie.
• wpisz polecenie exit i wciśnij Enter.
• zaczekaj i sprawdź czy aktualny czas i data nadal pojawiają się na ekranie.
• wpisz polecenie ps –ef i wciśnij Enter.

background image

• zanotuj PPID powłoki wykonującej skrypt s1.
UWAGA: W systemach innych niż Knoppix nastąpi wylogowanie użytkownika. W celu
dokończenia zadania należy ponownie się zalogować.

Czy zanotowane PPID są identyczne? Dlaczego?

Czy aktualna data i czas nadal pojawiają się na ekranie?

UWAGA: W przypadku braku przekierowania wyjścia do pliku efekty działania polecenia
zapisywane są w katalogu użytkownika w pliku nohup.out.
Polecenie nohup nie współpracuje z potokami i listą poleceń – należy w takich przypadkach
użyć skryptu.

Czy wielkość pliku nohup.out zmienia się?

4. Uruchamianie procesów za pomocą Crone.


Każdy użytkownik w systemie GNU/Linux ma dostęp do systemu Cron poprzez program
crontab

. Program umożliwia zakładanie, edycję i wyświetlanie pliku konfiguracyjnego dla

danego użytkownika. Opis programu crontab można znaleźć w podręczniku crontab(1).
Podstawowe wywołania crontab to:

crontab -e

- edycja pliku,

crontab -l

- wyświetlenie pliku,

crontab -r

- usunięcie pliku,

crontab -u user

{-e|-l-r}

- edycja pliku zadanego użytkownika - wywołanie

tylko dla administratora,

crontab plik

- użycie gotowego

pliku

jako

crontab

.

Całość konfiguracji dla pojedynczego użytkownika znajduje się w pliku

crontab

, którego

dokładna składnia jest opisana w podręczniku crontab(5). Plik zawiera szereg zadań (zleceń)
dla systemu Cron, gdzie przez zadanie można rozumieć polecenie, które ma być
wykonywane w dokładnie zdefiniowanym cyklu (na przykład każdego dnia). Każdy
użytkownik może założyć jeden taki plik, i może się w nim znajdować wiele zadań, każde w
osobnej linii. Jedna linia opisuje jedno zadanie i składa się z sześciu pól, rozdzielonych
białymi spacjami. Pola w każdej linii oznaczają kolejno: minutę, godzinę dzień miesiąca,
miesiąc, dzień tygodnia, ostatnie to nazwa polecenia do wykonania. Gwiazdka w miejscu
wartości oznacza: ,,dla każdej wartości pola''. W danym polu można podawać kilka wartości
rozdzielonych przecinkami, natomiast użycie znaku ,,-'' pozwala na podanie zakresu
wartości. Podanie po zakresie znaku ,,/'' i kolejnej wartości umożliwia podanie kroku w
obrębie zakresu.

Edycję pliku można rozpocząć od pierwszej linii. Przykładowo, jeżeli chce się uruchamiać
polecenie

who

co godzinę, linia w

crontab

może wyglądać następująco:

0 * * * * who

Jak widać w polach oznaczających czas wystarczy podać jedną wartość. Jest ona podana w
polu minut, a nie jak można by się spodziewać w polu godzin i oznacza w której minucie
godziny będzie uruchamiane polecenie.
Aby uruchamiać polecenie raz dziennie należy podać określoną godzinę i minutę. Linia

0 8 * * * who

background image

Spowoduje uruchomienie who każdego dnia o 8:00.
Dni tygodnia są numerowane od 0 do 7 i mogą być opisywane skrótami angielskimi, np.
mon, tue (jan, feb). Oprócz konkretnych, pojedynczych wartości pól można podawać kilka
wartości rozdzielonych przecinkami. Można również podać zakres wartości, czyli dwie liczby
rozdzielone znakiem ,,-''. Domyślnym krokiem w przypadku zakresu jest jeden, lecz można
również podać inny. W poniższym przykładzie:

0,20,40 8-16 * * * who

Nietrywialnym przykładem może być podanie tylko pól minut i dnia miesiąca:

10 * 5 * * who

W tym przypadku who będzie uruchamiane co godzinę każdego piątego dnia miesiąca.

20-40 0,8,16 1-30/2 * * who

oznacza uruchamianie polecenia o godzinach od 0:20 do 0:40 co minutę, następnie od 8:20
do 8:40 co minutę (podobnie dla 16), co dwa dni. Na koniec przykładów warto się
zastanowić, jaki efekt przyniesie podanie 5 gwiazdek w polu czasu.

Oprócz plików użytkowników system Cron ma jeden systemowy plik konfiguracyjny,
/etc/crontab

, który może być edytowany bezpośrednio przez administratora.

# /etc/crontab: system-wide crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
25 6 * * * root run-parts --report /etc/cron.daily

Zwraca uwagę pojawienie się po polach określających czas dodatkowego, siódmego, pola
związanego z użytkownikiem.

5. Reagowanie na sygnały w skryptach.

Utwórz plik s2 zawierający poniższy skrypt i nadaj mu prawo wykonywania:
#!/bin/bash
trap ‘echo Nie dasz rady’ 15
while true
do

echo $0 - `date` - Sprobuj mnie wylaczyc

sleep

15

done

Aby zatrzymać proces pierwszoplanowy: • uruchom skrypt s2 wpisując polecenie ./s2 i
naciśnij Enter; • Zaczekaj aż na ekranie pojawi się kilka komunikatów skryptu i naciśnij ^C
(Ctrl-C). Czy skrypt zakończył swoje działanie?

Aby zatrzymać proces nie reagujący na SIGTERM: • uruchom skrypt s2 w tle wpisując
polecenie ./s2 & i naciśnij Enter; • Zaczekaj aż na ekranie pojawi się kilka komunikatów
skryptu;• Wyślij do skryptu sygnał SIGTERM.
Czy skrypt zakończył swoje działanie?

• Wyślij do skryptu sygnał SIGKILL. Czy skrypt zakończył swoje działanie?


Wyszukiwarka

Podobne podstrony:
lab9 2 id 260334 Nieznany
lab9 5 id 260341 Nieznany
grafika 3D lab9 id 194729 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
pedagogika ogolna id 353595 Nieznany
Misc3 id 302777 Nieznany

więcej podobnych podstron