Comentarii Tema Asistenți
Intoarce-ma la pagina temei
LG
Un proces gardian nu trebuie să fie numaidecât singletonic. Poate vreau să am mai multe chestii care vreau să le mențin în permanență în funcționare: de ex. o instanță de apache și una de mysql. Nu înțeleg care e scopul acestei cerințe.
Nu se specifică o listă clară a semnalelor care trebuie ignorate. Nu înțeleg *de ce* trebuie ignorate?
SIGSEGV *nu* ar trebui ignorat! E un mod în care putem afla dacă programul nostru guardian
are probleme de codare. Instrucțiunea executată după ce se execută o rutină de tratare a SIGSEGV e acceași care a cauzat lansarea semnalului. De asta, după ce un program face un acces invalid la memorie se întâmplă următoarele:
dacă semnalul e ignorat cu SIG_IGN, sistemul va omorâ procesul: sistemul își dă seama că la următorul acces la memorie, deoarece nu s-a schimbat nimic în proces, reluând instrucțiunea nu va face decât să se regenereze semnalul. Sistemul știe că se va intra într-o buclă infinită.
dacă semanul e ignorat „manual” (adică tratat de o funcție care nu face nimic) se va intra într-o buclă infinită. Din păcate sistemul de operare n-are cum să știe dacă ăsta a fost sau nu scopul și nu va omorâ procesul. Procesul va ocupa 100% din procesor (cu majoritatea timpului petrecut în system).
Văd (din teste) că fișierele stderr/stdout trebuie deschise în mod append. Nu se specifică nicăieri treaba asta. E un lucru dorit sau așa a apucat să fie? N-ar fi mai util ca fiecare copil lansat să aibă fișierul lui (de ex. să conțină pid-ul în nume: ls.stderr.1291 și ls.stdout.1291).
De ce trebuie să rulăm procesul și din dosarul curent? Cum vrei să facem asta și de ce: modificând PATH
să știe și de pwd()
sau folosind execv()
? De ce nu e mai normal să punem „./” în nume ca în:guardian ./proces_din_directorul_curent args args …
? Ăsta e comportamentul pentru strace
, gdb
ș.a., de ce să fie guardian
special?
Testele nu verifică dacă inputul e legat la stdin
. Un test simplu ar fi să avem un child5
să se citească ceva de la STDIN_FILENO. Dacă nu se poate citi nimic: succes.
Cu ce sunt diferite (dpdv al comportamentului testat) testele 2 și 3? E nevoie de ambele sau ar putea rămâne doar unul?
Nu se testează și nu e specificat ce trebuie făcut dacă programul pe care îl gardăm nu există
R: Fixed, mersi