Ero sivun ”Prosessi” versioiden välillä

Siirry navigaatioon Siirry hakuun
1 025 merkkiä lisätty ,  27. marraskuuta 2020
p
ei muokkausyhteenvetoa
pEi muokkausyhteenvetoa
 
(11 välissä olevaa versiota 6 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
{{perustietoa}}
{{perustietoa}}
*[[wikipedia:fi:Prosessi|Prosessi Wikipediassa]]
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.
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).


=Prosessien tausta-ajo=
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 päällekkäin. Toinen on graafinen videonkatseluohjelma [[gmplayer]] ja toinen on musiikintoisto-ohjelma [[xmms]]. Normaalisti konsolissa kirjoittaisit vain ohjelman nimen ja ohjelma käynnistyisi, jos tämä prosessi kuitenkin halutaan tausta-ajoon siten, että samasta terminaalista voidaan käynnistää useita ohjelmia, tulee sen perään liittää "&"-merkki. Kun olet kirjoittanut ohjelman nimen "&"-merkin kanssa, tulostaa konsoli sinulle ohjelman "työnumeron" sekä [[PID]]:n, joiden avulla voit myöhemmin esimerkiksi [[kill|tappaa]] prosessin.
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
Noin, nyt voimme heti perään käynnistää toisen ohjelman - sen gmplayerin jonka alunperin halusimme tulevan samaan aikaan ajoon. Tämä tapahtuu aivan identtisellä tavalla:
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:
  gmplayer &
  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 terminaalin) pysähdyksiin painamalla CTRL+Z. Tämän jälkeen saat prosessin tausta-ajoon kirjoittamalla konsoliin [[bg]] %työnumero. 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 konsolin ollessa aktiivinen ikkuna '''Ctrl+z'''
Painetaan terminaaliemulaattori-ikkunan ollessa aktiivisena Ctrl+Z.
   
   
Konsoliin tulee teksti, joka kertoo prosessin työnumeron, tilan sekä nimen
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 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ä ohjemia 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.
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==
Ohjelmien tappaminen on seuraava mielenkiinnon aiheemme. 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" tai "kill PID". Ohjelman PID:n saat esimerkiksi komennolla "pstree -p" tai [[top]], jotka käynnistävät ohjelman. Ottakaamme esimerkiksi PID:n hakemisessa ohjelma pstree ja tappakaamme jumittunut xmms-prosessi.
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.


Katsotaan käynnissä olevien prosessien määrä
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 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
Nyt prosessi on kuollut ja ohjelman pitäisi olla sulkeutunut.
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]], lisää tietoa tausta-ajosta
*[[:Luokka:Prosessienhallinta|Prosessienhallinta-luokka]]
*[[kill]], lisää tietoa ohjelmien tappamisesta
*[[bg]] - lisätietoa tausta-ajosta
*[[kill]] - lisätietoa ohjelmien tappamisesta
*[[Signaali]]


[[Luokka:Käsitteet]]
[[Luokka:Käsitteet]]
[[Luokka:Järjestelmä]]
[[Luokka:Ohjeet]]
[[Luokka:Prosessienhallinta]]
1 122

muokkausta

Navigointivalikko