Muokataan sivua Prosessi

Siirry navigaatioon Siirry hakuun
Varoitus: Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos kirjaudut sisään tai luot tunnuksen, muokkauksesi yhdistetään käyttäjänimeesi ja saat paremman käyttökokemuksen.

Kumoaminen voidaan suorittaa. Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen julkaise alla näkyvät muutokset.

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-ajo==
''Prosessien tausta-ajoa on käsitelty myös artikkelissa [[Komentorivin perusteet]].''
''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.
Otetaan esimerkkitilanne, jossa haluat ajaa kahta ohjelmaa päällekkäin. 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 [[terminaaliemulaattori]]sta 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 [[kill|tappaa]] prosessin.


Ohjelman käynnistäminen tausta-ajoon
Ohjelman käynnistäminen tausta-ajoon
Rivi 16: Rivi 12:
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:
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 &
  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 &-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:
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ä
Pysäytetään ohjelma xmms, joka on käynnistetty ilman "&"-merkkiä
  xmms
  xmms
Painetaan terminaaliemulaattori-ikkunan ollessa aktiivisena Ctrl+Z.
Painetaan terminaaliemulaattorin ollessa aktiivinen ikkuna '''Ctrl+Z'''
   
   
Ruutuun tulee teksti, joka kertoo prosessin työnumeron, tilan sekä nimen
Ruutuun tulee teksti, joka kertoo prosessin työnumeron, tilan sekä nimen
Rivi 31: Rivi 27:
  bg %1  
  bg %1  


Prosessin saa myös nostettua etualalle komentamalla <tt>%työnumero</tt> tai <tt>[[fg]] %työnumero</tt>
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 <tt>[[jobs]]</tt> 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.
 
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.
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.


Tarkistetaan käynnissä olevien taustaprosessien määrä
Katsotaan käynnissä olevien prosessien määrä
  jobs
  jobs
Tulostus näyttää tämäntapaiselta
Tulostus näyttää tämäntapaiselta
Rivi 67: Rivi 61:
                                                                         |-xmms+
                                                                         |-xmms+
                                                                         `-xmms+
                                                                         `-xmms+
Katsotaan ''päällimmäisen'' xmms-prosessin PID ja tapetaan se (prosessi lihavoitu)
Katsotaan PÄÄLLIMMÄISEN xmms-prosessin PID ja tapetaan se (prosessi lihavoitu)
  kill 25068
  kill 25068
Tapetaan ohjelman killallin avulla antamalla sen nimi:
Tapetaan ohjelman killallin avulla antamalla sen nimi:
  killall xmms
  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]].
Nyt prosessi on kuollut ja ohjelman pitäisi olla sulkeutunut.


==Katso myös==
==Katso myös==
*[[:Luokka:Prosessienhallinta|Prosessienhallinta-luokka]]
*[[bg]], lisää tietoa tausta-ajosta
*[[bg]] - lisätietoa tausta-ajosta
*[[kill]], lisää tietoa ohjelmien tappamisesta
*[[kill]] - lisätietoa ohjelmien tappamisesta
*[[Signaali]]


[[Luokka:Käsitteet]]
[[Luokka:Käsitteet]]
[[Luokka:Järjestelmä]]
[[Luokka:Järjestelmä]]
[[Luokka:Ohjeet]]
[[Luokka:Ohjeet]]
[[Luokka:Prosessienhallinta]]
Wikin materiaali on kaikkien vapaasti käytettävissä Creative Commons 3.0 - nimi mainittava -lisenssin alaisuudessa. TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!

Muokataksesi tätä sivua vastaa alla olevaan kysymykseen (lisätietoja):

Peruuta Muokkausohjeet (avautuu uuteen ikkunaan)

Tällä sivulla käytetyt mallineet:

Noudettu kohteesta ”https://www.linux.fi/wiki/Prosessi