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?