Praca z procesami i zadaniami

 - Bill, wyrzuć śmieci.
 - Nie chce mi się.
 - sudo Bill, wyrzuć śmieci.
 - Już idę...
                          /* nadesłał: Maciej Urbanek, IS 2012 */

DO PRZYGOTOWANIA

Samodzielnie należy przed tym laboratorium przygotować:

WPROWADZENIE

Zadania

Zadania (ang. jobs) to programy uruchamiane w sesji przez powłokę.

  • usypianie (ang. suspend) zadań Ctrl+Z ,
  • spis zadań jobs,
  • przełączanie zadań fg,
  • praca w tle bg,
  • usuwanie zadań kill,
  • równoległe uruchamianie zadań (ampersand, czyli &),
  • uwaga, w.w. polecenia są poleceniami wbudowanymi w shell i są opisane w manualu shella!

Procesy

  • identyfikator PID i jego znaczenie
  • wyświetlanie listy procesów ps, ps -A (Sun), ps -ax (Linux), a także ps -u user, ps aux|grep user
  • zmniejszanie priorytetu nice,
  • usuwanie procesów kill, kill -9
W pubie siedzi grupka informatyków, obok grupka dresiarzy. 
Drudzy zachowują się agresywnie i podśmiewają się z postury geeków i ich flanelowych wdzianek. 
Atmosfera gęstnieje, nie wiadomo czy nie dojdzie do awantury. Wtem… dzwoni telefon. [odbiera informatyk] 
- Co??? W ogóle ci nie odpowiada? W ogóle się ciebie nie słucha? 
Próbowałeś już „nice”? Taak? Nic nie dało..? Ok. Dobra — skilluj go. [odkłada słuchawkę] 
W tym momencie najbardziej napakowany z dresów wstaje i z wielkim podziwem odzywa się do informatyka:
- Szacun.

                                                  /* nadesłał: Filip Szukała, IS 2013 */

GNU coreutils i inne

Jest to zestaw podstawowych narzędzi GNU operujących na tekście, w tym:

  • tail/head
  • cat/tac
  • wc
  • cut
  • sort
  • tr
  • uniq
  • seq
  • xargs
  • expr
  • sed (dla zainteresowanych)

Proszę przeglądnąć manule do w.w.!

Uwaga: warto też poczytać man textutils (większość w.w. poleceń była kiedyś w pakiecie GNU textutils).

Grep

Program grep służy do wyszukiwania zadanych wyrażeniami regularnymi wzorców w tekście.

grep napis [plik]

Przydatne opcje:

  • -i ignoruje wielkość znaków
  • -v odwraca działanie grep (czyli wyświetl wszystkie linie, które NIE zawierają napisu).

Strumienie

Każdy proces pracujący w środowisku Unix komunikuje się z otoczeniem m.in. przez strumienie. Domyślnie są otwierane 3:

  • 0 standard input (stdin)
  • 1 standard output (stdout)
  • 2 standard error (output) (stderr)

Przekierowania strumieni

Powłoka pozwala na przekierowanie strumieni, w sh znakami:

  • > przekierowanie stdout do pliku (nadpisanie)
  • >> jak wyżej, dopisanie
  • < przekierowanie stdin z pliku
[n] > plik
[n] >> plik
< plik

Przykłady:

ps > foo
w 2 > bar
ls >foo 2>bar

Przydatny przy przekierowaniu stderr (2) jest /dev/null. Pozwala na pozbycie się danych.

Komunikacja między procesami

Powłoka pozwala na realizowanie komunikacji między procesami przez łączenie strumieni, uruchamiane przez znak | (ang. pipe). Powoduje on połącznie stdout zadania 1 z stdin zadania 2. Przykład:

ls | wc
ps | sort

Pozwala to na tworzenie dowolnie złożonych filtrów:

ps -A | grep tcsh | wc
cut -d ':' -f 5 /etc/passwd | grep -i jacek | wc -l

Podstawianie wyników pracy poleceń

Podstawianie wyników poleceń w linii pleceń jest realizowane przez odwrotny apostrof (klawisz tyldy, nad tabulatorem), na przykład:

$ echo "To jest system" `uname` "na maszynie "`hostname`
To jest system Linux na maszynie enterprise

ĆWICZENIA

1 Zadania

Ćwiczenie wykonywać w GNU Bash.

  1. uruchomić lynx www.agh.edu.pl
  2. nacisnąć Ctrl+Z,
  3. uruchomić lynx www.uj.edu.pl
  4. nacisnąć Ctrl+Z,
  5. napisać jobs,
  6. uruchomić lynx www.pk.edu.pl
  7. nacisnąć Ctrl+Z,
  8. napisać jobs,
  9. napisać fg %2,
  10. nacisnąć Ctrl+Z,
  11. itd….
  12. napisać kill %3
  13. napisać jobs,
  14. itd….

O ile zadanie nie znika po kill trzeba uzyc opcji -9.

Podobne ćwiczenie powtórzyć dla innych programów, np. vi (sprawdzić czy edytor nie uruchamia dodatkowej powłoki zamiast suspend), less, mc, itp.

2 Procesy

  1. Otworzyć 3 sesje (zalogować się 3 razy, np. przez SSH), w miarę możliwości sprawdzić różnice w systemach Linux, Solaris (np. serwer student).
  2. Sprawdzić przy pomocy ps pracujące procesy: w tej samej sesji, tylko swoje procesy, wszystkie procesy w systemie.
  3. Przetestować działanie znanych opcji ps, jakie są różnice pomiędzy Linux a Solaris?
  4. Przy pomocy kill usunąć z sesji B procesy pracujące w sesji A.
  5. Jak usunąć login shell?
  6. Oglądnąć przy pomocy kill -l spis wszystkich sygnałów.
  7. Uruchomić procesy z podwyższoną wartością nice.
  8. Zmienić wartość nice pracującego już procesu.
  9. Jak wyświetlić wartość nice procesu?

3 Procesy a Zadania

  • każde uruchomienie programu w Unixie tworzy proces
  • zadania, są mechanizmem dostarczanym przez shell dla ułatwienia obsługi uruchamianych z danej sesji (instancji shella) procesów
  • żeby wyświetlić PID procesów którym odpowiadają zadania należy po uruchomieniu kilku zadań napisać jobs -l
  • każda sesja jest obsługiwana przez plik urządzenia pseudoterminala
  • aby wyświetlić w.w. plik należy wpisać tty (patrz Lab1)
  • aby wyświetlić procesy pracyjące w danej sesji należy wpisać ps -t`tty`

4 Przekazywanie wyników pracy do plików

  • Przekierować wyniki pracy różnych poleceń do plików, np. dla ps ls finger who. Przeglądnąć powstałe pliki.
  • Porównać działanie > i >> Na przykład:
ps
ps > plik1
more plik1
ls > plik2
more plik2
ps >> plik2
more plik2
  • Przekierować wyjście błędów, np:
kill 1
kill 1 1>a 2>b

Uwaga! przekierowania są inicjalizowane przez shell przed uruchomieniem polecenia! Dlatego też, jeżeli mamy plik do posortowania, np:

who >plik

i wykonamy:

sort plik >plik

otrzymamy pusty plik, gdyż jego zawartość zostanie skrócona do zera przed posortowaniem. A uruchamiając:

sort plik >>plik

otrzymamy w pliku posortowaną zawartość dopisaną do oryginalnej, nie posortowanej!

5 GNU textutils i inne

  • Mając spis zalogowanych użytkowników:
who > spis
  • Posortować go alfabetycznie:
sort spis > spis.alf
  • Wyświetlić początek i koniec spisu (Ile linii jest wyświetlanych? Jak zadać tę liczbę?):
head spis.alf
head spis.alf >spis.alf.pocz
tail spis.alf
tail spis.alf >spis.alf.kon
  • Wybrać z tego spisu (przy pomocy grep) użytkowników zalogowanych z komputerów w domenie ia.agh.edu.pl
  • Przećwiczyć inne polecenia z TextUtils.
  • Powtórzyć ćwiczenia dla innych danych wejściowych, np. spisu plików, procesów, itp.
  • Skąd są czytane dane jeżeli nie poda się nazwy plików w poleceniach typu grep, tail?
  • Co to jest znak końca pliku i jak się go wysyła „ręcznie”?
  • Po laboratorium uzupełnić wiadomości nt. wyrażeń regularnych (grep(1)).

6 Komunikacja między procesami

Należy ponownie wykonać ćwiczenia z p. 4.4 nie używając plików pośrednich, tylko odpowiednio łączyć stdin z stdout, np.

who | sort | grep 'ia.agh.edu.pl' | head

Inne przykłady:

ls | wc
ps | sort
ps -A | grep tcsh
ps | head -n 1
who | wc
who | sort
nice du -sk /usr/local/* 2>/dev/null | sort -rn | head

Proszę przeprowadzić jak najwięcej własnych eksperymentów z wykorzystaniem wszystkich znanych poleceń!

Przykład dłuższego filtru.

Zadanie dodatkowe

Używając wyłącznie poleceń grep, cut, tr, head, tail, na podstawie strony http://nbp.pl/home.aspx?f=/kursy/kursya.html stworzyć filtr generujący tekstową tabelę kursów walut.
Przykładowy wynik końcowy może wyglądać następująco:

bat (Tajlandia)	1 THB	0,0895
dolar amerykański	1 USD	2,8953
dolar australijski	1 AUD	2,6376
dolar Hongkongu	1 HKD	0,3730
dolar kanadyjski	1 CAD	2,8452
dolar nowozelandzki	1 NZD	2,0405
dolar singapurski	1 SGD	2,0657
euro	1 EUR	3,9136
forint (Węgry)	100 HUF	1,4782
frank szwajcarski	1 CHF	2,7316
funt szterling	1 GBP	4,3350
hrywna (Ukraina)	1 UAH	0,3633
jen (Japonia)	100 JPY	3,1991
korona czeska	1 CZK	0,1539
korona duńska	1 DKK	0,5260
korona estońska	1 EEK	0,2501
korona islandzka	100 ISK	2,2784
korona norweska	1 NOK	0,4872
korona szwedzka	1 SEK	0,4020
kuna chorwacka	1 HRK	0,5392
lej rumuński	1 RON	0,9572
lew bułgarski	1 BGN	2,0010
lira turecka	1 TRY	1,8767
lit litewski	1 LTL	1,1334
łat łotewski	1 LVL	5,5281
peso filipińskie	1 PHP	0,0634
peso meksykańskie	1 MXN	0,2295
rand (RPA)	1 ZAR	0,3933
real brazylijski	1 BRL	1,6079
ringgit malezyjski	1 MYR	0,8722
rubel rosyjski	1 RUB	0,0987
rupia (Indonezja)	10000 IDR	3,1798
won (Korea Płd.)	100 KRW	0,2550
yuan renminbi (Chiny)	1 CNY	0,4242
SDR (MFW)	1 XDR	4,4149

Konstrukcję filtru można rozpocząć poleceniem:

echo -e 'GET /home.aspx?f=/kursy/kursya.html HTTP/1.0\n\n' | nc nbp.pl 80

które umożliwia wyświetlenie zawartości strony.

Jeśli chcesz wiedzieć więcej

VARIA

Przy zamykaniu powłoki do wszystkich procesów z niej uruchomionych wysyłany jest sygnał HangUp (HUP). Aby pozostawić jakieś polecenie pracujące w tel po zamknięciu shella, należy je uruchomić:

nohup polecenie
pl/dydaktyka/unix/lab_zadania_i_procesy.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0