Ero sivun ”Prosessi” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
ei muokkausyhteenvetoa
p (pid) |
pEi muokkausyhteenvetoa |
||
(14 välissä olevaa versiota 9 käyttäjän tekeminä ei näytetä) | |||
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. | |||
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]] |