Protsessid ja signaalid
Protsess - Kindlaksmääratud sündmustejada, mis on piiritletud oma otstarbe või toimega, sh täitmisel olev programm või selle osa. Kui on käivitatud ühe programmi (näit. 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 Windows’i 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 sulgetakse). 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 gedit
i 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
, seetõttu potentsiaalsed hoiatus- ja veateated tulevad 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 &
kasutamisel mingil muul eesmärgil, nt grep & /etc/passwd
ei anna oodatud tulemust. Korrektne on sel juhul panna &
märk apostroofide 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 enamikest 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, nagu oleks kohe alguses protsessi käivitanud &-märgiga.
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 koheselt 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 terminali aken avada. Aga 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 kill
asemel käsku pkill
, mille parameetriks ei ole mitte protsessi ID, vaid käsu(faili) nimi. Siiski tasub tähele panna, et kui on käivitatud mitu samanimelist käsku, siis signaal saadetakse kõigile neile.
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 Unix-laadsetes süsteemides võib vahetevahel kokku puutuda nn zombidega: protsessidega, mis on oma töö lõpetanud, kuid mis on alles protsessitabelis. Zombiks muutub iga lapsprotsess, mille vanem veel ei tea lapse töö lõppemisest. Kopeerige järgnev python 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 Zombide otsimiseks kasutage käsku ps axu
ning vaadake alajaotust STAT
(täpsemalt uurige man ps
alajaotust PROCESS STATE CODES
). Zombie 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. Juhul 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õpetada.
Protsessi käivitamiseks nii, et see väljalogimisel jääks 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 standarvä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 kõik mis me sisestame, tuleb 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 <. Näiteks kui 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 2 on 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 ka standardväljundi ümbersuunamiseks kasutada 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
- kuvab kõikide protsesside nimekirja.
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 3.ndast lõpuni. ennecut
käsku on soovitav lisada käsujadasse ka käsktr -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
- loenda kokku ridade arv ja väljasta see.
Käivita neid käske alustades kõige esimesest ja lisa ükshaaval | abil järgimisi käske lõppu.
Vaata ka kokkuvõtet enamlevinud Unixi tekstitöötluskäskude kohta siit.
Ülesanded
- Käivita
gedit
käsurealt, nüüd peata programmi töö ajutiseltCTRL
+Z
klahvikombinatsiooniga, veendu etgedit
i aken on hangunud, seejärel saada talleSIGCONT
signaal ning veendu, etgedit
i aken toimib jälle. Pane oma vikilehele ekraanitõmmis käskude käivitamisest oma terminaliaknas. - Käivita
gedit
taustal&
võtmega, saada selleleSIGHUP
signaal ja veendu, et aken sulgus. Seejärel käivitagedit
nohup
käsuga, saada sellele uuestiSIGHUP
signaal ning veendu, et gedit jääb käima. Nüüd sisesta käsk millega saadnohup
käivitatudgedit
protsessi sulgeda. Pane oma vikilehele ekraanitõmmis käskude käivitamisest oma terminaliaknas, sh tõestuseks protsessi kadumise või allesjäämise kohtaps
käsu väljund. - Koosta ja lisa wikisse käsujada, mis kuvab (modifitseerib)
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äänud peab olema eemaldatud. Lisaks ekraanpildile tuleks tuua välja ka käsk teksti kujul. Veenduge, et tulemuses on ainult "daemon" sõne sisaldavad programminimed koos parameetritega. Samuti peaksid olema protsesside nimed täielikud, mitte lühemaks lõigatud. - Koosta ja lisa wikisse 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 nimegaipaddress.txt
. Nüüd kontrollige tulemust käsugaxargs -n1 ping -c 2 < ipaddress.txt
Lisaks ekraanpildile tuleks tuua välja ka käsk teksti kujul. Tulemus peaks välja nägema midagi sellist
Tulemus
Kui teil viki lehekülg valmis on, siis lisage meile kommentaar (koos mingi tühja failiga).
6. Praktikum 6 - Protsessi signaalid, sisendid ja väljundid(Tähtaeg 2 nädalat)