2. feladat
Jelzések
Feladva okt. 10-16, 2011
Határidő okt. 29, 2011
Feltölteni egy, a jelzés(ek) kezelését implementáló forrásállományt kell. Esetenként további segédállományokra lehet szükség.
Amennyiben
a házi nem volt órán bemutatva, ne felejtsük el a teszteredményeknek a
feladathoz való hozzáfűzésekor pontosan ismertetni azt is, hogy hogyan történt a
program tesztelése: hogyan küldtük a kért jelzés(eke)t
a folyamat(ok)nak.
1. Írjunk programot,
mely létrehoz két gyerekfolyamatot, a SIGTERM jelzésre az
egyik gyerekfolyamat befejeződik (az alapértelmezett jelzéskezelőt használva), a szülőfolyamat és a második gyerekfolyamat
pedig ugyanazon jelzés hatására kiír egy üzenetet,
melyben szerepel az illető folyamat
azonosítója. A második gyerekfolyamat rögtön be is fejeződik, a szülő viszont kivárja a két gyerekfolyamat befejezését, és csak azután áll
le.
2. Írjunk programot,
mely egy olyan kritikus szakaszt valósít meg, amin belül
nem veszi figyelembe a SIGQUIT és SIGINT jelzéseket. A kritikus
szakaszból a SIGTERM jelzés
hatására lépjen ki, és írja
ki a képernyőre a kritikus szakaszban eltöltött idő során
kapott jelzéseket és ezek időpontját.
3. Írjunk programot,
mely a SIGQUIT jelzésre kilistázza a rendszer azon felhasználóit, akiknek vannak "zombie"
(Z), illetve külön azokat, akiknek vannak felfüggesztett (T) állapotban levő folyamataik, majd befejeződik.
4. Írjunk programot,
mely beolvas egy állományból egy, néhány felhasználónevet
tartalmazó listát.
5. Írjunk programot,
mely beolvas egy állományból egy programneveket tartalmazó listát.
6. Írjunk programot,
mely számon tartja a rendszerbe bejelentkezett felhasználók által futtatott folyamatok számát. A SIGUSR1 jelzésre kilistázza az aktuális
helyzetre vonatkozó statisztikát, majd tovább fut. A program SIGUSR2 jelzésre befejeződik.
7. Írjunk programot,
mely számon tartja azon folyamatokat,
melyek a processzort több mint 50%-al terhelik. A
SIGHUP jelzésre listázza ki az aktuális helyzetre vonatkozó információkat. (Megj.: ahhoz, hogy a programot
kipróbálhassuk, lehet, hogy az 50% helyett
kisebb értéket kell használnunk.) A program SIGUSR1 jelzésre befejeződik.
8. Írjunk programot,
mely a SIGUSR1 jelzésre elkezdi egy szövegállomány
olvasását, a SIGUSR2 jelzésre
pedig erre vonatkozó statisztikát ír ki: eddigbeolvasott
sorok száma, szavak száma, karakterek
száma. (Egyszerűbb tesztelés érdekében esetleg olvasások közé be lehet egy
várakozást is tenni).
9. Írjunk programot,
mely létrehoz egy gyerekfolyamatot, és a SIGHUP jelre véletlenszerűen választ egy jelzést (egy
tetszőlegesen meghatározott,
legalább 5 különböző jelzést tartalmazó listából), melyet elküld a gyerekfolyamatnak. A gyerekfolyamat kiírja, hogy milyen jelzést
kapott, majd végrehajtja az
illető jelzéshez tartozó alapértelmezett műveletet.
10. Írjunk programot, mely megfordítja két jelzés hatását: például a SIGINT jelzésre egy SIGFPE jelzést generáljon és fordítva. (Más szóval SIGINT jelzésre azt hajtsa vérge, amit alapértelmezett módon SIGFPE jelzésre hajtana vérge, és fordítva. Esetleg előzőleg kiírhat egy, a kapott jelzést azonosító szöveget.)
11. Írjunk programot,
mely a SIGHUP jelzésre kilistázza a rendszerbe bejelentkezett felhasználók azonosítóját (mindeniket csak egyszer), illetve mindegyik mellé odaírja az általa éppen használt folyamatok számát. A program
SIGINT jelzésre befejeződik.
Tippek / gyakori hibák
ne felejtsünk el az elküldött házihoz mellékelni egy leírást a tesztelés módjáról