Ero sivun ”Prosessi” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
ei muokkausyhteenvetoa
p (→Prosessien tausta-ajo: kh, wikitys) |
pEi muokkausyhteenvetoa |
||
(11 välissä olevaa versiota 6 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). | |||
Otetaan esimerkkitilanne, jossa haluat ajaa kahta ohjelmaa | 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 | Ohjelman käynnistäminen tausta-ajoon | ||
Rivi 11: | Rivi 16: | ||
Ohjelman ajaminen tulostaa seuraavaa: [työnumero][PID] ohjelmannimi | Ohjelman ajaminen tulostaa seuraavaa: [työnumero][PID] ohjelmannimi | ||
[1][3017] xmms | [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. | 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 | 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 | Pysäytetään ohjelma xmms, joka on käynnistetty ilman &-merkkiä | ||
xmms | xmms | ||
Painetaan | Painetaan terminaaliemulaattori-ikkunan ollessa aktiivisena Ctrl+Z. | ||
Ruutuun tulee teksti, joka kertoo prosessin työnumeron, tilan sekä nimen | |||
[1]+ Stopped xmms | [1]+ Stopped xmms | ||
Nyt asetamme ohjelman tausta-ajoon (katsomme työnumeron edellä tulevasta tulosteesta) | Nyt asetamme ohjelman tausta-ajoon (katsomme työnumeron edellä tulevasta tulosteesta) | ||
bg %1 | bg %1 | ||
Prosessin saa myös nostettua etualalle | 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= | ==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 | jobs | ||
Tulostus näyttää tämäntapaiselta | Tulostus näyttää tämäntapaiselta | ||
Rivi 60: | Rivi 67: | ||
|-xmms+ | |-xmms+ | ||
`-xmms+ | `-xmms+ | ||
Katsotaan | Katsotaan ''päällimmäisen'' xmms-prosessin PID ja tapetaan se (prosessi lihavoitu) | ||
kill 25068 | 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== | ==Katso myös== | ||
*[[bg]] | *[[:Luokka:Prosessienhallinta|Prosessienhallinta-luokka]] | ||
*[[kill]] | *[[bg]] - lisätietoa tausta-ajosta | ||
*[[kill]] - lisätietoa ohjelmien tappamisesta | |||
*[[Signaali]] | |||
[[Luokka:Käsitteet]] | [[Luokka:Käsitteet]] | ||
[[Luokka:Järjestelmä]] | |||
[[Luokka:Ohjeet]] | |||
[[Luokka:Prosessienhallinta]] |