Nykyinen versio |
Oma tekstisi |
Rivi 1: |
Rivi 1: |
| {{perustietoa}} | | {{perustietoa}} |
| Kun ohjelma käynnistetään, [[käyttöjärjestelmä]] luo '''prosessin''', jona ohjelmaa ajetaan. Prosessit yksilöidään [[PID]]-numeroilla ("process id"). Sovellus voi muodostua useammasta prosessista, joita se käynnistää [[fork]]-kutsuilla.
| | *[[wikipedia:fi:Prosessi|Prosessi Wikipediassa]] |
| | | Käynnissä olevia ohjelmia sanotaan prosesseiksi. Jotkut sovellukset saattavat käyttää useita prosesseja. Prosessit yksilöidään [[PID]]-numeroilla. Jokaista prosessia on myös mahdollista ajaa omalla prosessorilla (rinnakkaistus). |
| Itse prosessi voi koostua useammasta [[säie|säikeestä]], jotka prosesseista poiketen jakavat muistiavaruutensa ja muita resursseja. Linuxissa säikeet on toteutettu käytännössä itsenäisinä prosesseina, joita luotaessa vain on määritelty myös mitkä resurssit halutaan yhteisiksi ([[clone]]-kutsulla). Saman prosessin säikeillä on nykyään sama PID (mutta eri säie-ID).
| |
| | |
| Säie on se yksikkö, jolle varataan prosessoriaikaa, eli saman ohjelman eri säikeet tai prosessit voivat moniprosessorikoneella kukin olla ajossa samanaikaisesti eri prosessoreilla (rinnakkaistus).
| |
| | |
| __TOC__
| |
| ==Prosessien tausta-ajo==
| |
| ''Prosessien tausta-ajoa on käsitelty myös artikkelissa [[Komentorivin perusteet]].''
| |
| | |
| Otetaan esimerkkitilanne, jossa haluat ajaa kahta ohjelmaa yhtäaikaa. Toinen on videonkatseluohjelma [[mplayer]] ja toinen on musiikintoisto-ohjelma [[xmms]]. Normaalisti [[komentorivi]]llä kirjoittaisit vain ohjelman nimen ja ohjelma käynnistyisi, jos tämä prosessi kuitenkin halutaan tausta-ajoon siten, että samasta [[terminaali]]sta voidaan käynnistää useita ohjelmia, tulee ohjelman perään lisätä &-merkki. Kun olet kirjoittanut ohjelman nimen &-merkin kanssa, tulostaa [[komentotulkki]] sinulle ohjelman työnumeron sekä [[PID]]:n, joiden avulla voit myöhemmin esimerkiksi [[kill|sulkea/tappaa]] prosessin.
| |
| | |
| Ohjelman käynnistäminen tausta-ajoon
| |
| xmms &
| |
| Ohjelman ajaminen tulostaa seuraavaa: [työnumero][PID] ohjelmannimi
| |
| [1][3017] xmms
| |
| Nyt voimme heti perään käynnistää toisen ohjelman - sen mplayerin jonka alun perin halusimme tulevan samaan aikaan ajoon. Tämä tapahtuu aivan identtisellä tavalla:
| |
| mplayer &
| |
| Tämä antaa jälleen kerran tulosteeksi työnumeron ja PID:n.
| |
| | |
| On myös toinen tapa lähestyä tausta-ajoa, jos olemme käynnistäneet ohjelman ilman &-merkkiä ja haluamme sen tausta-ajoon. Voit yksinkertaisesti käyttää näppäimistöä asettamaan käynnissä olevan prosessin (joka tukkii komentorivin) pysähdyksiin painamalla '''Ctrl+Z'''. Tämän jälkeen saat prosessin tausta-ajoon kirjoittamalla komentoriville <tt>[[bg]] %työnumero</tt>. Käytännössä ensin ohjelma pysäytetään ja sen jälkeen asetetaan tausta-ajoon. Esimerkiksi:
| |
| | |
| Pysäytetään ohjelma xmms, joka on käynnistetty ilman &-merkkiä
| |
| xmms
| |
| Painetaan terminaaliemulaattori-ikkunan ollessa aktiivisena Ctrl+Z.
| |
|
| |
| Ruutuun tulee teksti, joka kertoo prosessin työnumeron, tilan sekä nimen
| |
| [1]+ Stopped xmms
| |
| Nyt asetamme ohjelman tausta-ajoon (katsomme työnumeron edellä tulevasta tulosteesta)
| |
| bg %1
| |
| | |
| Prosessin saa myös nostettua etualalle komentamalla <tt>%työnumero</tt> tai <tt>[[fg]] %työnumero</tt>
| |
| | |
| Nyt osaamme asettaa prosessit tausta-ajoon ja käynnistää kaksi ohjelmaa peräkkäin. Entäs jos haluamme ajaa kymmeniä ohjelmia päällekäin, emmekä muista ohjelmien työnumeroita? Komento <tt>[[jobs]]</tt> auttaa tässä tilanteessa. Kirjoittamalla komentoriville tuon komennon saamme listauksen kaikista töistä ja niiden työnumeroista. Tämän jälkeen komennolla <tt>bg %työnumero</tt> saa prosessit asetettua tausta-ajoon.
| |
| | |
| ==Ohjelmien tappaminen==
| |
| On todennäköistä, että joskus jokin ohjelma jää jumiin, eikä ole muuta keinoa kuin tappaa tämän ohjelman prosessi. Prosessin tappaminen tapahtuu komennolla <tt>[[kill]] %työnumero</tt>, <tt>kill PID</tt> tai <tt>[[killall]] ohjelmannimi</tt>. Ohjelman PID:n saa esimerkiksi komennoilla <tt>[[ps]] -A</tt>, <tt>[[pstree]] -p</tt> tai <tt>[[top]]</tt>. Seuraavassa haetaan PID-numero komennolla pstree ja tapetaan jumittunut xmms-prosessi.
| |
| | |
| Tarkistetaan käynnissä olevien taustaprosessien määrä
| |
| jobs
| |
| Tulostus näyttää tämäntapaiselta
| |
| [1]+ running [3333] xmms
| |
| [2]+ running [3434] gkrellm
| |
| [3]+ running [3344] gmplayer
| |
| Tapetaan prosessi työnumeron mukaan (gkrellm)
| |
| kill %2
| |
| Tuloste näyttää tämäntapaiselta
| |
| [2]+ exit 1 gkrellm
| |
| Otetaan pstree-tuloste PID:n mukaan ja tapetaan PID:n avulla xmms-prosessi
| |
| pstree -p
| |
| Tuloste (tulostetta kutistettu)
| |
| fluxbox(428)-+-Eterm(603)---bash(606)---irssi(7+
| |
| |-Eterm(1215)---bash(1218)---irssi+
| |
| |-Eterm(7868)---bash(7871)
| |
| |-Eterm(11586)---bash(11590)---irs+
| |
| |-Eterm(21647)---bash(21650)-+-pst+
| |
| | `-wis+
| |
| |-MozillaFirebird(20617)---Mozilla+
| |
| |-dcgui-qt(21267)---dcgui-qt(21270+
| |
| |-soffice.bin(21722)---soffice.bin+
| |
| |-ssh-agent(466)
| |
| |-wish(9520)---wish(9521)---wish(9+
| |
| `-'''xmms(25068)'''---xmms(25070)-+-xmms+
| |
| |-xmms+
| |
| |-xmms+
| |
| |-xmms+
| |
| `-xmms+
| |
| Katsotaan ''päällimmäisen'' xmms-prosessin PID ja tapetaan se (prosessi lihavoitu)
| |
| kill 25068
| |
| Tapetaan ohjelman killallin avulla antamalla sen nimi:
| |
| killall xmms
| |
| Oletuksena kill-komento pyytää ohjelmaa sulkeutumaan lähettämällä sille [[signaali]]n <tt>SIGTERM</tt>. Jos ohjelma on epäsivistynyt tai pahasti jumissa, se ei välttämättä sulkeudu. Katso komento [[kill]].
| |
| | |
| ==Katso myös==
| |
| *[[:Luokka:Prosessienhallinta|Prosessienhallinta-luokka]]
| |
| *[[bg]] - lisätietoa tausta-ajosta
| |
| *[[kill]] - lisätietoa ohjelmien tappamisesta
| |
| *[[Signaali]]
| |
|
| |
|
| [[Luokka:Käsitteet]] | | [[Luokka:Käsitteet]] |
| [[Luokka:Järjestelmä]]
| |
| [[Luokka:Ohjeet]]
| |
| [[Luokka:Prosessienhallinta]]
| |