Prosessi

Linux.fista
Versio hetkellä 5. helmikuuta 2008 kello 14.08 – tehnyt LP (keskustelu | muokkaukset) (selkeämpi johdanto; kill ei vältämättä tapa)
Siirry navigaatioon Siirry hakuun
Linux.fi-wikissä artikkelit käsittelevät yleensä aihettaan siltä osin, kuin se koskee Linuxia ja avoimia/vapaita ohjelmistoja. Yleisluontoisemman artikkelin tästä aiheesta löydät tietosanakirja Wikipediasta.

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.

Itse prosessi voi koostua useammasta 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).

Prosessien tausta-ajo

Prosessien tausta-ajoa on käsitelty myös artikkelissa Komentorivin perusteet.

Otetaan esimerkkitilanne, jossa haluat ajaa kahta ohjelmaa päällekkäin. Toinen on videonkatseluohjelma mplayer ja toinen on musiikintoisto-ohjelma xmms. Normaalisti komentorivillä kirjoittaisit vain ohjelman nimen ja ohjelma käynnistyisi, jos tämä prosessi kuitenkin halutaan tausta-ajoon siten, että samasta terminaaliemulaattorista voidaan käynnistää useita ohjelmia, tulee sen perään liittää "&"-merkki. Kun olet kirjoittanut ohjelman nimen "&"-merkin kanssa, tulostaa komentotulkki sinulle ohjelman "työnumeron" sekä PID:n, joiden avulla voit myöhemmin esimerkiksi 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 alunperin 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 bg %työnumero. 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 terminaaliemulaattorin ollessa aktiivinen ikkuna 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 painamalla "%työnumero" tai "fg %työnumero" Noniin, nyt osaamme asettaa prosessit tausta-ajoon ja käynnistää kaksi ohjelmaa peräkkäin. Entä se tilanne kun haluamme ajaa kymmeniä ohjelmia päällekäin, emmekä muista suoraan ohjelmien työnumeroita. Komento jobs auttaa tässä tilanteessa. Kirjoittamalla terminaaliin tuon komennon saamme listauksen kaikista töistämme ja niiden työnumeroista. Tämän jälkeen komennolla"bg %n" saamme asetettua ohjelmat tausta-ajoon.

Ohjelmien tappaminen

On todennäköistä, että joskus GNU/Linuxia käyttäessäsi ohjelma jää jumiin ja sinulla ei ole muuta keinoa kuin tappaa tämän ohjelman prosessi. Prosessin tappaminen tapahtuu komennolla "kill %työnumero", "kill PID tai killall ohjelmannimi". Ohjelman PID:n saat esimerkiksi komennoilla "ps -A , pstree -p" tai top. Ottakaamme esimerkiksi PID:n hakemisessa ohjelma pstree ja tappakaamme jumittunut xmms-prosessi.

Katsotaan käynnissä olevien prosessien 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 SIGTERM. Jos ohjelma on epäsivistynyt tai pahasti jumissa, se ei välttämättä sulkeudu. Katso kill.

Katso myös

  • bg, lisää tietoa tausta-ajosta
  • kill, lisää tietoa ohjelmien tappamisesta