Ero sivun ”Prosessi” versioiden välillä
Ei muokkausyhteenvetoa |
pEi muokkausyhteenvetoa |
||
(15 välissä olevaa versiota 10 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]] |
Nykyinen versio 27. marraskuuta 2020 kello 11.31
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[muokkaa]
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 komentorivillä 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 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 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 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 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 %työnumero tai fg %työnumero
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 jobs auttaa tässä tilanteessa. Kirjoittamalla komentoriville tuon komennon saamme listauksen kaikista töistä ja niiden työnumeroista. Tämän jälkeen komennolla bg %työnumero saa prosessit asetettua tausta-ajoon.
Ohjelmien tappaminen[muokkaa]
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 kill %työnumero, kill PID tai killall ohjelmannimi. Ohjelman PID:n saa esimerkiksi komennoilla ps -A, pstree -p tai top. 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 signaalin SIGTERM. Jos ohjelma on epäsivistynyt tai pahasti jumissa, se ei välttämättä sulkeudu. Katso komento kill.
Katso myös[muokkaa]
- Prosessienhallinta-luokka
- bg - lisätietoa tausta-ajosta
- kill - lisätietoa ohjelmien tappamisesta
- Signaali