Päivitetty: 30.12.2010
 

Harjoitus 3: Prosessit ja signaalit

Huomio! Tehtäviä tarkennettu 30.11.2010 ja 2.12.2010. Lisäykset lihavoituna ja poistetut kohdat yliviivattuina.

30.12.2010 lievennetty vaatimuksia harjoitustyön rinnakkaistamisesta.

3.1. Haaraudu

Tee ohjelma, joka luo ensin lapsiprosessin (fork). Tämän jälkeen sekä äiti- että lapsiprosessi tulostavat prosessitunnisteensa (pid). Lopuksi äitiprosessi jää odottamaan (wait) lapsiprosessin päättymistä ja ilmoittaa päättyikö lapsiprosessi normaalisti vai ei. Edellisessä tapauksessa tulostetaan myös lapsiprosessin palauttama tila-arvo (status).

Palautettavat tiedostot: Tätä tehtävää jatketaan seuraavassa tehtävässä eikä palauteta sellaisenaan.

3.2. Signaalit

Muuta ohjelmaa sillä tavalla, että lapsiprosessi odottaa (alarm & pause) komentoriviparameterina annetun ajan ennen päättymistään. Jotta lapsiprosessi päättyisi normaalisti, SIGALRM-signaaliin täytyy liittää käsittelijä (sigaction). Lisää äitiprosessiin signaalinkäsittelijä (sigaction), joka prosessin päättävän signaalin (esim. SIGKILL, SIGTERM, SIGQUIT) saatuaan lopettaa (kill) myös lapsiprosessin.

Palautettavat tiedostot: Tätä tehtävää jatketaan seuraavassa tehtävässä eikä palauteta sellaisenaan.

3.3. Signalointi

Muuta ohjelmaa vielä sillä tavalla, että saadessaan pysäytys- (SIGSTOP) SIGUSR1- tai jatkamissignaalin (SIGCONT) SIGUSR2-signaalin äitiprosessi välittää (kill) sen lapselleen. Pysäytyssignaalilla lapsiprosessi pysäyttää ajastimen, ja vastaavasti jatkamissignaalilla ajastin käynnistetään tarvittaessa uudelleen siitä arvosta, jonka se ehti saavuttaa ennen keskeyttämistä.

Palautettavat tiedostot: Kokoa tämän tehtävän ratkaisemiseen tarvittavat lähdekoodit ja Makefile paketoituna tiedostoon 3.3.tar.gz.

3.4. Rinnakkaistuva palvelin

Jatketaan viime kerralla aloitetun (tehtävä 2.3) harjoitustyön tekoa. Muuta palvelinta sillä tavalla, että jokainen asiakkaalta tullut kysely ja päivityspyyntö käsitellään omassa prosessissaan. Lopetussignaalin saadessaan palvelin lopettaa kaikki käynnistämänsä lapsiprosessit.

Lisätty 30.12.2010: Rinnakkaistamisen saa tehdä myös säikeillä (toisin sanoen ei tarvitse tehdä erillisillä prosesseilla).

Palautettavat tiedostot: Tätä tehtävää jatketaan myöhemmin ja käytetään osana isoa harjoitustyötä.

Kotisivut
Tiedotteet
Aikataulu
Luennot
Harjoitukset
Suorittaminen
Linkkejä
Vastauksia UKK
Yhteystiedot
In English
Tulostettava
versio
 
 
© 2000-2008 Henrik Hedberg