Systemy operacyjne
Rafał Polak 12k2 |
Laboratorium Komputerowe nr.8 |
TEMAT: Środowisko Linux - Procesy w systemie Unix
Celem ćwiczenia będzie zapoznanie się z podstawowymi informacjami dotyczącymi procesów w systemie Unix. System ten pozwala na wykonywanie wiele procesów jednocześnie, jest to jednak pozorne, gdyż w danym momencie wykonuje się tylko jeden co pare milisekund. Wszystkie procesy posiadają swojego rodzica, z których się wywodzą, po za jednym wyjątkiem, procesem init uruchamianym wraz ze startem systemu. Posiadają one swoje numery identyfikacyjne oraz numery swoich przodków.
WYŚWIETLANIE PROCESÓW
Aby zobaczyć istniejące procesy w systemie, które aktualnie pracują służy polecenie ps. Do wyświetlenia pełnej listy procesów oraz do podziału na strony wyświetlania należy dopisać parametry -ef | more.
Ps -ef | more
W kolumnach dostaniemy informacje oznaczone skrótami tj.:
- UID numer 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
W systemie procesy mają wielu różnych właścicieli. Chcąc zobaczyć procesy tylko jednego właściciela wpisujemy polecenie ps -fu nazwa_użytkownika. Na poniższym zrzucie ekranu widać w jaki sposób są dane wyświetlane. Jest to tylko niewielka część procesów istniejących w systemie.
ZADANIA w SYSTEMIE
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. Podczas uruchamiania zadania, aktywne zadanie, w tym przypadku nasz terminal przechodzi do działania w tle. Zadania możemy uruchamiać tak aby działały w tle oraz je usypiać ( inaczej zatrzymywać ) i wyłączać ( zabijać ). Do uruchomienia procesu w tle wykorzystujemy symbol „&”.
:nano & - edytor nano uruchomiony w tle
CTRL+Z - uśpienie działającego procesu
Uruchamiamy w tle kilka programów. Aby zobaczyć wszystkie istniejące zadania w systemie wpisujemy w wierszu poleceń jobs.
Programy uruchamiane w tle zostają automatyczne zastopowane. Możemy je wywołać na główne okno, czyli przejść do programu poleceniem
Fg %numer_zadania - tzw. foreground
// uruchamiane w tle to background.
Programy w tle często powinny wykonywać jakieś działania, dla naszego oka niewidoczne. Aby sprawdzić czy taka możliwość istnieje wywołamy zadanie, które wykonywać się będzie w tle a swoje wyniki działania zapisuje do pliku. Dla porównania zostanie ten sam skrypt uruchomiony w tle oraz w sposób tradycyjny.
Po uruchomieniu skryptu dwa wcześniej uruchomione zadania są zastopowane, natomiast skrypt data jest w trakcie pracy. Zapisuje on aktualną datę w pliku z odstępem 30 sekund dokładnie dwa razy. Natomiast gdy uruchomi się ten sam skrypt w tradycyjny sposób zostaniemy pozbawieni na 30 sekund dostępu do normalnej pracy na konsoli. A więc co jeżeli chcemy przerwać działanie takiego skryptu na rzecz ważniejszych działań…
ZABIJANIE PROCESÓW I ZADAŃ
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:
kill -STOP %numer
Jeżeli chcemy wyłączyć, zakończyć zadanie w systemie używamy polecenia:
kill -9 %numer
Do zakańczania procesów w systemie wykorzystujemy ten sam sposób, jednakże podajemy numer identyfikacyjny procesu PID i nie poprzedzamy znakiem procentu. Jeżeli zabijemy proces, który posiadał dzieci, czyli był rodzicem dla innych procesów, procesy te także bezwarunkowo zostaną zakończone.