Institute of Computer Science
  1. Courses
  2. 2022/23 fall
  3. Operating Systems (LTAT.06.001)
ET
Log in

Operating Systems 2022/23 fall

  • Pealeht
  • Loengud
  • Praktikumid
  • Kodutööd

Protsessid ja signaalid

Protsess – Kindlaksmääratud sündmuste jada, mis on piiritletud oma otstarbe või toimega, sh täitmisel olev programm või selle osa. Kui on käivitatud ühe programmi (nt veebibrauseri) kaks eksemplari, siis töötab arvutis korraga kaks ühe ja sama nimega protsessi. Arvuti sisselülitamisel käivitatakse terve hulk protsesse, millest osa kujutavad endast opsüsteemi komponente ja osa iseseisvaid programme, mis on seatud käivituma arvuti buutimisel. Et näha, millised protsessid on parajasti aktiivsed, tuleb Windowsi arvutis vajutada korraga klahve Ctrl-Alt-Del ja käivitada Task Manager. http://www.vallaste.ee/

Tegum – Loogiliselt tervikliku otstarbega, iseseisvana täidetav programm või selle osa, opsüsteemi ressursse tarbiv töötlusüksus. (sõna protsess sünonüüm) http://www.vallaste.ee/

Programmi käivitamisel tekib protsess. Protsess on töötava programmi eksemplar mälus.

Protsessi käivitamine

Enamik käsurea käske käivitab protsessi, sealhulgas ka käsk ps, mis väljastab protsesside nimekirja.

tambet@tambet-VirtualBox:~$ ps
  PID TTY          TIME CMD
 3475 pts/5    00:00:00 bash
 3527 pts/5    00:00:00 ps
tambet@tambet-VirtualBox:~$

Nagu näha, on ka käsk ps ise protsess – igal käivitamisel on tal erinev protsessi-ID (PID).

Protsess võib pärast oma töö tegemist kohe lõpetada või jäädagi käima, näiteks ps lõpetab oma töö kohe ja annab juhtimise tagasi käsureale, gedit aga jääb "rippuma".

tambet@tambet-VirtualBox:~$ gedit myfile.txt

Käsurida vabaneb, kui protsess oma töö lõpetab (graafiliste programmide puhul programm suletakse). Jõuga saab protsessi töö käsureal lõpetada klahvikombinatsiooniga CTRL+C, kus C tähendab Cancel.

Protsessi käivitamine taustal – &

Kui käivitatav protsess kestab pikemat aega või blokeerib terminali oma töö ajaks, siis on kasulikum see käivitada taustal. Selleks tuleb käsu lõppu lisada &. Sulge gediti aken ja käivita käsk nii:

tambet@tambet-VirtualBox:~$ gedit myfile.txt &
[1] 2888

Taustal käivitamisel trükitakse välja taustatöö järjekorranumber ja protsessi-ID (PID). Programmi standardväljundiks (ja veaväljundiks) jääb endiselt terminal, mistõttu tulevad potentsiaalsed hoiatus- ja veateated ka hiljem terminalile. Sama juhtub ka siis, kui mõnda tavalist käsku (nt ps) käivitada &-märgiga.

tambet@tambet-VirtualBox:~$ ps &
[1] 3528
tambet@tambet-VirtualBox:~$   PID TTY          TIME CMD
 3475 pts/5    00:00:00 bash
 3528 pts/5    00:00:00 ps

[1]+  Done                    ps
tambet@tambet-VirtualBox:~$ 

Taustatöö lõpetamisel trükitakse pärast esimest sisestusklahvi vajutust välja taustatöö järjekorranumber, Done ja käsk ise.

NB! Eelneva tõttu tuleb ettevaatlik olla &-märgi kasutamisel mingil muul eesmärgil, nt grep & /etc/passwd ei anna oodatud tulemust. Korrektne on sel juhul panna & ülakomade vahele – grep '&' /etc/passwd.

Protsesside nimekiri – ps

Kasutaja protsesside nimekirja väljastab käsk ps. Mõned näited:

ps
Kuvab jooksva terminaliga seotud protsessid.
ps -u tambet
Kuvab kõik kasutaja tambet protsessid.
ps -ef
Kuvab kõik (every) süsteemi protsessid täisandmetega (full).

Protsessi töö lõpetamine – Ctrl+C (interrupt)

Aktiivse protsessi töö lõpetab Ctrl+C. Proovi seda gediti puhul – käivita gedit blokeeruvana ja vajuta Ctrl+C – aken sulgub.

tambet@tambet-VirtualBox:~$ gedit myfile.txt

CTRL+C
tambet@tambet-VirtualBox:~$ 

Ctrl+C saadab tegelikult protsessile SIGINT-signaali ja see aitab üldiselt enamikust kokkujooksnud programmidest välja. Samas on programmides võimalus ka seda ignoreerida ja mõned seda ka teevad, nt nano – veendu, et sellest ei saa Ctrl+C-ga välja minna!

tambet@tambet-VirtualBox:~$ nano myfile.txt

CTRL+C ei katkesta protsessi nano tööd, väljumiseks vajuta CTRL+X.

Protsessi töö peatamine – Ctrl+Z (suspend)

Aktiivse protsessi töö peatab Ctrl+Z (tegelikult saadab SIGSTOP-signaali). Proovi seda geditiga – aken hangub, seal ei tööta enam miski.

tambet@tambet-VirtualBox:~$ gedit myfile.txt

CTRL+Z
[1]+  Stopped                 gedit myfile.txt
tambet@tambet-VirtualBox:~$

Peatatud protsessi aktiveerimine – fg (foreground)

Peatatud protsessi aktiveerib uuesti käsk fg (tegelikult saadab signaali SIGCONT). Proovi seda geditiga – selleni jõuavad tagantjärele kõik peatatud seisus tehtud hiireklikid.

tambet@tambet-VirtualBox:~$ fg
gedit myfile.txt

See käsk kehtib kõigi taustal olevate protsesside kohta, nii &-märgiga käivitatud kui Ctrl+Z-ga peatatud protsesside kohta.

Peatatud protsessi viimine taustale – bg (background)

Peatatud protsessi paneb taustal käima käsk bg (sisuliselt saadab samuti signaali SIGCONT). Proovi geditiga – peata see, veendu, et aken on hangunud, seejärel käivita taustal, veendu, et aken töötab ja käsureal saab samuti järgmisi käske sisestada. Tekstiredaktori viimist taustale läheb vaja näiteks ssh-d kasutades.

tambet@tambet-VirtualBox:~$ gedit myfile.txt

CTRL+Z

tambet@tambet-VirtualBox:~$ bg
[1]+ gedit &
tambet@tambet-VirtualBox:~$

Protsessi viimine taustale bg-käsuga on samaväärne kohe alguses protsessi &-märgiga käivitamisega.

Taustal olevate protsesside nimekiri – jobs

Kui käivitada taustal mitu protsessi, siis käsk jobs näitab nende nimekirja. Pane järgnevad programmid tööle samalt käsurealt &-märgiga ja ära neid kohe sulge.

tambet@tambet-VirtualBox:~$ sol &
[2] 3212
tambet@tambet-VirtualBox:~$ gedit myfile.txt &
[3] 3216
tambet@tambet-VirtualBox:~$ gnome-calculator &
[4] 3220
tambet@tambet-VirtualBox:~$ jobs
[1]-  Running                 sol &
[2]-  Running                 gedit myfile.txt &
[3]+  Running                 gnome-calculator &

+-märk tähistab jooksvat taustatööd ja --märk eelmist.

Nii fg- kui bg-käsule saab parameetriks anda taustaprotsessi järjekorranumbri kujul %n.

tambet@tambet-VirtualBox:~$ fg %3
gnome-calculator

Ei tohiks segamini ajada ps- ja jobs-käske, kuigi nende sisu ja väljund on sarnane. ps näitab kõiki aktiivse terminali(akna)ga seotud protsesse, jobs aga käsurealt käivitatud taustaprotsesse. ps identifitseerib protsesse protsessi-ID (PID) kaudu, jobs aga taustaprotsessi järjekorranumbri kaudu. Mõnes mõttes on fg, bg ja jobs arhailised käsud ühes terminalis mitme protsessi käivitamiseks. Tänapäeval on lihtsam uus terminaliaken avada. Samas aitab nende teadmine teatud olukordades toime tulla (remote management, skriptimine jne) ja selgitab ka protsesside olemust.

jobs, fg ja bg on kestprogrammi (shell) sisekäsud, need ise uut protsessi ei tekita. Protsessi tekitavad ainult väliskäsud, need, mille käsufaili which on võimeline leidma.

tambet@tambet-VirtualBox:~$ which ps
tambet@tambet-VirtualBox:~$ which fg

Protsessidele signaali saatmine – kill

Kui protsess raiskab palju süsteemi ressursse, ei reageeri enam käskudele vms, siis ei jää muud üle kui see protsess tappa. Samas piisab vahepeal ka lihtsalt sellest, kui palju ressursse nõudev protsess korraks seisma panna, et kiiremad ülesanded ära teha. Seda tüüpi ülesannete jaoks on käsk kill, mille parameetriks on protsessi-ID (PID) ja valikuliselt ka saadetav signaal.

tambet@tambet-VirtualBox:~$ firefox &
tambet@tambet-VirtualBox:~$ gnome-calculator &
tambet@tambet-VirtualBox:~$ gedit &
tambet@tambet-VirtualBox:~$ ps
  PID TTY          TIME CMD
 2460 pts/0    00:00:00 bash
 3055 pts/0    00:00:25 firefox
 3419 pts/0    00:00:00 gnome-calculato
 3423 pts/0    00:00:00 gedit
 3431 pts/0    00:00:00 ps
tambet@tambet-VirtualBox:~$ kill 3423

Käsk kill saadab vaikimisi protsessile SIGTERM-signaali. Signaalid on lihtsustatud protsessidevahelise side vorm, millega üks protsess saab teisele teada anda mingisugusest sündmusest. Iga protsess saab määrata oma loogika, kuidas ta mingile signaalile reageerib. Standardsed signaalide tähised koos nende numbrite ja vaikimisi käitumistega on toodud siin.

Protsessi tapmine on üsna samaväärne protsessi toomisega esiplaanile ja Ctrl+C vajutamisega – SIGINT- ja SIGTERM-signaalid käituvad väga sarnaselt. Kui protsess on nii põhjalikult kokku jooksnud, et ka seda signaali ignoreerib, siis aitab ainult signaal SIGKILL (näiteks proovige tappa tekstiredaktorit vi):

tambet@tambet-VirtualBox:~$ vi &
tambet@tambet-VirtualBox:~$ ps
  PID TTY          TIME CMD
 3401 pts/0    00:00:00 vi
tambet@tambet-VirtualBox:~$ kill -SIGTERM 3401
tambet@tambet-VirtualBox:~$ ps
tambet@tambet-VirtualBox:~$ kill -SIGINT 3401
tambet@tambet-VirtualBox:~$ ps
tambet@tambet-VirtualBox:~$ kill -SIGKILL 3401
tambet@tambet-VirtualBox:~$ ps

Signaali nime asemel võib kasutada ka tema järjekorranumbrit, nt protsessi tapmist tähistatakse tihtipeale lihtsalt kill -9.

Mõnes olukorras võib olla mugavam kasutada käsu kill asemel käsku pkill, mille parameetriks ei ole mitte protsessi-ID, vaid käsu(faili) nimi. Siiski tasub tähele panna, et kui käivitatud on mitu samanimelist käsku, siis signaal saadetakse neile kõigile.

tambet@tambet-VirtualBox:~$ sol &
tambet@tambet-VirtualBox:~$ sol &
tambet@tambet-VirtualBox:~$ sol &
tambet@tambet-VirtualBox:~$ ps
tambet@tambet-VirtualBox:~$ pkill sol

Zombid

Linuxis ja teistes Unixi-laadsetes süsteemides võib vahetevahel kokku puutuda nn zombidega: protsessidega, mis on oma töö lõpetanud, kuid mis on protsessitabelis alles. Zombiks muutub iga lapsprotsess, mille vanem veel ei tea lapse töö lõppemisest. Kopeerige järgnev Pythoni kood faili nimega zombie.py ja käivitage antud kood (fail) käsurea käsuga python3 zombie.py:

import os

def child():
   print("Uus protsess loodud", os.getpid())
#  lahku kohe, tekib zombie'''
   os._exit(0)

def parent():
   while True:
      newpid = os.fork()
      if newpid == 0:
         child()
      else:
         pids = (os.getpid(), newpid)
         print("Protsesside id-d on: %d, tytar: %d" % pids)
# iga input peale 'q' tekitab while tsyklis uue protsessi 
      if input( ) == 'q': break
parent()

Jätke zombie.py tööle, tekitage selle abil uusi lapsprotsesse (ENTER zombie.py käivitamise järel) ning kasutage zombide otsimiseks käsku ps axu ja vaadake alajaotust STAT (täpsemalt uurige man psi alajaotust PROCESS STATE CODES). Zombi tähis on Z.

Püüdke neid teises terminalis (ps a) tappa kill-käsu abil. Kas õnnestub? Ka kill -9 ei tohiks töötada, protsess kaob koos vanemprotsessi lõppemisega. Kui vanemprotsess last ei kustuta, jääb protsess alles orvuna, kuuludes init-protsessile. Orvud võivad tekkida vanemprotsessi kokku jooksmisel.

Protsessi käivitamine väljalogimiskindlana – nohup (no hang up)

Väljalogimisel lõpetatakse kõik kasutaja protsessid. Mõnikord võib aga tekkida vajadus näiteks ööseks mingi protsess käima jätta (näiteks ülikooli serverisse filmi alla laadima?). Väljalogimisel saavad kõik kasutaja protsessid SIGHUP-signaali (HUP – hang up, pärineb ajast, kui sisselogimiseks kasutati telefoniliini modemeid – väljalogimisel "pandi toru ära"). Vaikimisi käitumine SIGHUP-signaali peale on protsessi töö lõpetamine.

Protsessi käivitamiseks nii, et see jääks väljalogimisel edasi käima, tuleb kasutada käsku nohup. nohup asendab vaikimisi SIGHUP-signaali käsitleja (handler) uuega, mis ignoreerib seda signaali. Katsetame seda käsuga sleep, mis ei tee midagi muud, kui lihtsalt ootab parameetriks antud arvu sekundeid. Käivita käsk nohup sleep 10000, logi välja, logi uuesti sisse, kontrolli, et see protsess endiselt käib (ps -axu | grep sleep), tapa see protsess kill-käsuga.

Protsessi sisend ja väljund

Klassikalises mõttes on igal programmil sisend ja väljund, programm teostab sisendi põhjal mingid arvutused ja tagastab tulemuse väljundisse. Sellest lähtuvalt on ka igal protsessil standardsisend ja standardväljund. Vaikimisi on standardsisendiks klaviatuur ja standardväljundiks ekraan (terminal). Siin me räägime tekstipõhisest sisendist ja väljundist, graafiline kasutajaliides jääb sellest skeemist välja. Unixi protsessidel on lisaks ka veaväljund, mis on vaikimisi samuti suunatud ekraanile (terminalile).

Protsessi jaoks on sisend ja väljund lihtsalt tähemärkide vood. Osa tähemärke võivad olla eritähendusega – nt ASCII kood 10 on reavahetus, selle saatmine väljundisse tähendab, et kursor tuleb viia järgmise rea algusesse. On olemas kokkuleppelised erikoodid kursori viimiseks kindlasse kohta ekraanil, ekraani puhastamiseks, värvide muutmiseks jne. See võimaldab programmeerida interaktiivseid kasutajaliideseid, jäädes endiselt sisend-väljund-paradigma piiresse.

Näiteks käsk cat ilma parameetriteta kopeerib lihtsalt standardsisendi standardväljundisse. Seetõttu tuleb kõik, mis me sisestame, ekraanile topelt – kõigepealt sisestamise tulemusena (klaviatuurilt sisestatud andmed dubleeritakse reeglina terminaliprogrammi poolt standardväljundisse), teiseks sisendandmete standardväljundisse kopeerimise tulemusena:

tambet@tambet-VirtualBox:~$ cat
tere
tere
maailm
maailm
CTRL+C

See on Unixi käskude puhul väga levinud, et kui jätta failinimi parameetriks panemata, siis loetakse andmed standardsisendist.

Väljundi suunamine – >

Standardväljundit on võimalik ümber suunata, selleks tuleb käsu järele lisada > ning selle järele faili nimi:

tambet@tambet-VirtualBox:~$ ls -l >ls.txt
tambet@tambet-VirtualBox:~$ cat ls.txt
total 52
drwxr-xr-x 2 tambet tambet 4096 sept   6 14:45 Desktop
drwxr-xr-x 2 tambet tambet 4096 sept   6 14:45 Documents
drwxr-xr-x 2 tambet tambet 4096 okt    7 13:16 Downloads
-rw-r--r-- 1 tambet tambet 8942 sept   6 14:41 examples.desktop
drwxrwxr-x 2 tambet tambet 4096 okt   15 09:17 klass
-rw-rw-r-- 1 tambet tambet    0 nov    2 18:47 ls.txt
drwxr-xr-x 2 tambet tambet 4096 sept   6 14:45 Music
drwxr-xr-x 2 tambet tambet 4096 sept   6 14:45 Pictures
drwxr-xr-x 2 tambet tambet 4096 sept   6 14:45 Public
drwxrwxrwt 2 tambet tambet 4096 okt    7 13:26 temp
drwxr-xr-x 2 tambet tambet 4096 sept   6 14:45 Templates
drwxr-xr-x 2 tambet tambet 4096 sept   6 14:45 Videos

Väljundi lisamine faili – >>

Väljundi ümbersuunamine kirjutab sihtfaili alati üle. >> võimaldab väljundi lisada olemasoleva faili lõppu.

tambet@tambet-VirtualBox:~$ ls -l >>ls.txt
tambet@tambet-VirtualBox:~$ cat ls.txt
total 52
drwxr-xr-x 2 tambet tambet 4096 sept   6 14:45 Desktop
...
total 56
drwxr-xr-x 2 tambet tambet 4096 sept   6 14:45 Desktop
...

Sisendi ümbersuunamine – <

Ka protsessi sisendit on võimalik ümber suunata, selleks on <. Kui näiteks grep-käsule jätta failinime parameeter lisamata, siis võtab ta oma andmed standardsisendist (ehk jääb klaviatuuri taha ootama). Seetõttu on järgmised käsud samaväärsed:

tambet@tambet-VirtualBox:~$ grep tambet /etc/passwd
tambet:x:1000:1000:Tambet Matiisen,,,:/home/tambet:/bin/bash
tambet@tambet-VirtualBox:~$ grep tambet </etc/passwd
tambet:x:1000:1000:Tambet Matiisen,,,:/home/tambet:/bin/bash

Veaväljundi ümbersuunamine – 2>

Kui cat-käsule parameetriks antud faili pole olemas, siis viga selle kohta tuleb ikka ekraanile, isegi kui käsu väljund on ümber suunatud:

tambet@tambet-VirtualBox:~$ cat xyz >valjund.txt
cat: xyz: No such file or directory
tambet@tambet-VirtualBox:~$ cat valjund.txt

Põhjuseks on see, et veateated trükitakse veaväljundisse, mis on meil ümber suunamata. Veaväljundi ümbersuunamiseks tuleb > ette panna 2:

tambet@tambet-VirtualBox:~$ cat xyz >valjund.txt 2>vead.txt
tambet@tambet-VirtualBox:~$ cat vead.txt 
cat: xyz: No such file or directory

Failipidemed (file descriptors)

Eelnevas näites on 2 tegelikult veaväljundi failipideme (file descriptor) number. Iga protsessi käivitumisel on tema jaoks automaatselt avatud kolm failipidet: 0 – standardsisend, 1 – standardväljund, 2 – veaväljund. Seetõttu võib standardväljundi ümbersuunamiseks kasutada ka 1> ja standardsisendi ümbersuunamiseks 0<.

Avatud failipidemete nimekirja saab näha /proc-failisüsteemi kaudu:

tambet@arendus:~$ touch firefox.in
tambet@arendus:~$ firefox 0<firefox.in 1>firefox.out 2>firefox.err &
[1] 14738
tambet@arendus:~$ ls -l /proc/14738/fd
total 0
lr-x------ 1 tambet tambet 64 Nov  3 07:37 0 -> /home/tambet/firefox.in
l-wx------ 1 tambet tambet 64 Nov  3 07:37 1 -> /home/tambet/firefox.out
l-wx------ 1 tambet tambet 64 Nov  3 07:37 10 -> pipe:[48172351]
lr-x------ 1 tambet tambet 64 Nov  3 07:37 11 -> /dev/urandom
lr-x------ 1 tambet tambet 64 Nov  3 07:37 12 -> /home/tambet/.mozilla/firefox/58qqyu61.default/XPC.mfasl
lr-x------ 1 tambet tambet 64 Nov  3 07:37 13 -> /usr/share/iceweasel/chrome/en-US.jar
lrwx------ 1 tambet tambet 64 Nov  3 07:37 14 -> /home/tambet/.mozilla/firefox/58qqyu61.default/permissions.sqlite
lr-x------ 1 tambet tambet 64 Nov  3 07:37 15 -> /usr/share/iceweasel/chrome/browser.jar
lr-x------ 1 tambet tambet 64 Nov  3 07:37 16 -> /usr/share/xulrunner-1.9.1/chrome/en-US.jar
lr-x------ 1 tambet tambet 64 Nov  3 07:37 17 -> /usr/share/xulrunner-1.9.1/chrome/classic.jar
lr-x------ 1 tambet tambet 64 Nov  3 07:37 18 -> /usr/share/xulrunner-1.9.1/chrome/toolkit.jar
lrwx------ 1 tambet tambet 64 Nov  3 07:37 19 -> /home/tambet/.mozilla/firefox/58qqyu61.default/search.sqlite
l-wx------ 1 tambet tambet 64 Nov  3 07:37 2 -> /home/tambet/firefox.err
lrwx------ 1 tambet tambet 64 Nov  3 07:37 20 -> /home/tambet/.mozilla/firefox/58qqyu61.default/places.sqlite
lr-x------ 1 tambet tambet 64 Nov  3 07:37 21 -> /home/tambet/.mozilla/firefox/58qqyu61.default/XUL.mfasl
lr-x------ 1 tambet tambet 64 Nov  3 07:37 22 -> /usr/share/iceweasel/searchplugins
lrwx------ 1 tambet tambet 64 Nov  3 07:37 23 -> /home/tambet/.mozilla/firefox/58qqyu61.default/formhistory.sqlite
lr-x------ 1 tambet tambet 64 Nov  3 07:37 24 -> /usr/share/iceweasel/chrome/classic.jar
lrwx------ 1 tambet tambet 64 Nov  3 07:37 25 -> /home/tambet/.mozilla/firefox/58qqyu61.default/content-prefs.sqlite
lrwx------ 1 tambet tambet 64 Nov  3 07:37 26 -> /home/tambet/.mozilla/firefox/58qqyu61.default/cert8.db
lrwx------ 1 tambet tambet 64 Nov  3 07:37 27 -> /home/tambet/.mozilla/firefox/58qqyu61.default/key3.db
lr-x------ 1 tambet tambet 64 Nov  3 07:37 28 -> pipe:[48172416]
l-wx------ 1 tambet tambet 64 Nov  3 07:37 29 -> pipe:[48172416]
lrwx------ 1 tambet tambet 64 Nov  3 07:37 3 -> socket:[48172300]
lrwx------ 1 tambet tambet 64 Nov  3 07:37 30 -> /home/tambet/.mozilla/firefox/58qqyu61.default/urlclassifier3.sqlite
lrwx------ 1 tambet tambet 64 Nov  3 07:37 31 -> /home/tambet/.mozilla/firefox/58qqyu61.default/cookies.sqlite
lrwx------ 1 tambet tambet 64 Nov  3 07:37 32 -> /home/tambet/.mozilla/firefox/58qqyu61.default/downloads.sqlite
lr-x------ 1 tambet tambet 64 Nov  3 07:37 4 -> pipe:[48172302]
l-wx------ 1 tambet tambet 64 Nov  3 07:37 5 -> pipe:[48172302]
l-wx------ 1 tambet tambet 64 Nov  3 07:37 6 -> /home/tambet/.mozilla/firefox/58qqyu61.default/.parentlock
lr-x------ 1 tambet tambet 64 Nov  3 07:37 7 -> pipe:[48172350]
l-wx------ 1 tambet tambet 64 Nov  3 07:37 8 -> pipe:[48172350]
lr-x------ 1 tambet tambet 64 Nov  3 07:37 9 -> pipe:[48172351]

Kui soovida veaväljundit suunata samasse, kuhu läheb standardväljund, siis võlusõna on 2>&1:

tambet@tambet-VirtualBox:~$ cat xyz >valjund.txt 2>&1
tambet@tambet-VirtualBox:~$ cat valjund.txt 
cat: xyz: No such file or directory

Siin tähistab &, et järgneb failipideme number, mitte failinimi.

Väljundi suunamine teise programmi sisendiks – |

Ühe programmi väljundi suunamine teise programmi sisendisse võimaldab lihtsatest käskudest konstrueerida kokku küllaltki keerulisi andmetöötlusjadasid. Programmide sisendi ja väljundi võimaldab kokku ühendada | ehk toru (pipe).

Näiteks süsteemi kasutajate faili kuvamine lehekülgede kaupa:

tambet@arendus:~$ cat /etc/passwd | more

Protsessinimekirjast nende kuvamine, mis sisaldavad teatud sõna:

tambet@arendus:~$ ps -ef | grep bash

Vastus teise praktikumi ülesandele "leida erinevate kasutajate arv, kelle protsesse süsteemis käib":

tambet@arendus:~$ ps -ef | tail -n+2 | cut -c-9 | sort | uniq | wc -l
9

Harutame viimase käsu juppideks:

ps -ef
kuva kõikide protsesside nimekiri.
tail -n+2
kuva kõik read alates teisest reast.
cut -c-9
jäta sisendi igalt realt alles ainult esimesed 9 tähemärki. -c asemel on tihti vaja kasutada ka cut -d" " -f3--käsku, mis siis seab väljade eraldajaks tühiku ning jätab alles tulbad 3ndast lõpuni. Enne cut-käsku on soovitatav lisada käsujadasse ka käsk tr -s " ", mis eemaldab korduvad tühikud.
sort
sorteeri sisend tähestiku järjekorras (eeldus uniq-käsule).
uniq
jäta korduvad read alles ühekordselt.
wc -l
loe kokku ridade arv ja väljasta see.

Käivita neid käske, alustades kõige esimesest, ja lisa ükshaaval | abil järgmisi käske lõppu.

Vaata ka kokkuvõtet enamlevinud Unixi tekstitöötluskäskude kohta siit.

Ülesanded

  1. Käivita gedit käsurealt, nüüd peata programmi töö ajutiselt klahvikombinatsiooniga CTRL+Z, veendu, et gediti aken on hangunud, seejärel saada talle SIGCONT-signaal ning veendu, et gediti aken toimib jälle. Pane oma vikilehele ekraanitõmmis käskude käivitamisest oma terminaliaknas.
  2. Käivita gedit taustal &-võtmega, saada sellele SIGHUP-signaal ja veendu, et aken sulgus. Seejärel käivita gedit nohup-käsuga, saada sellele uuesti SIGHUP-signaal ning veendu, et gedit jääb käima. Nüüd sisesta käsk, millega saad nohupi käivitatud gediti protsessi sulgeda. Pane oma vikilehele ekraanitõmmis käskude käivitamisest oma terminaliaknas, sh tõestuseks protsessi kadumise või allesjäämise kohta ps-käsu väljund.
  3. Koosta ja lisa vikisse käsujada, mis kuvab (modifitseerib) käsu ps -axu | grep daemon väljundi nii, et tulemuseks oleksid ainult programminimed koos lisaparameetritega (näiteks avahi-daemon: running [Perenimi-L21.local]). Vihje: tr-käsk aitab lahti saada tülikatest tühikutest. Nimekirjas peavad olema ainult programmide nimed ja nende parameetrid, kõik ülejäänu peab olema eemaldatud. Lisaks ekraanipildile tuleks tuua välja ka käsk teksti kujul. Veenduge, et tulemuses on ainult sõne "daemon" sisaldavad programminimed koos parameetritega. Samuti peaksid protsesside nimed olema täielikud, mitte lühemaks lõigatud.
  4. Koosta ja lisa vikisse käsujada (ip a | grep ...| ... | cut ... jne), mis kuvab ekraanile vastuseks ainult arvuti IP-aadressi (enamasti 10.0.2.15) ip a-käsu väljundi põhjal. NB! Käsk peaks hakkama saama ka eri pikkusega IP-aadressidega (näiteks 192.168.0.123 vs 10.0.2.15). Modifitseerige eelmist käsku nii, et tulemus salvestataks faili nimega ipaddress.txt. Nüüd kontrollige tulemust käsuga xargs -n1 ping -c 2 < ipaddress.txt. Lisaks ekraanipildile tuleks tuua välja ka käsk teksti kujul. Tulemus peaks välja nägema umbes selline:

Tulemus

Esitage nelja (4) praktikumijuhendi lõpus oleva ülesande vastused endale meeldivas levinud vormis (Github, viki, DOCX, PDF, ZIP, RAR jne) ning siia aknasse kas fail või kommentaar, kust teie lahenduse leiame.

6. Praktikum 6 - Protsessi signaalid, sisendid ja väljundid
Solutions for this task can no longer be submitted.

(Tähtaeg 2 nädalat)

  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment