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ä.
|