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.
    • R: Scopul nu are neapărat sens, am scris această specificație pentru a “complica” puțin o temă foarte simplistă.
  • Nu se specifică o listă clară a semnalelor care trebuie ignorate. Nu înțeleg *de ce* trebuie ignorate?
    • R: Am zis că restul semnalelor se ignoră; în implementarea mea am luat toate semnalele și am pus NO_HANDLE pe ele. Se ignoră pentru că nu este o aplicație reală. Poti pun handler pe ele si sa nu faci nimic in functia respectiva.
  • 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).
      • R: Deci, cum ziceam, feature-ul nu e neapărat ceva util. Eu vroiam doar să arătăm o modalitate de a intercepta/ignora semnale.
  • 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).
    • R: Da, am raspuns si la aceasta intrebare in sectiunea intrebari. Fisierele .stdout si .stderr se deschid in mod APPEND.
  • 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?
    • R: Just another nonstandard/useless feature.
  • 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.
    • R: O să integrez chestia asta în testul 3.
  • Cu ce sunt diferite (dpdv al comportamentului testat) testele 2 și 3? E nevoie de ambele sau ar putea rămâne doar unul?
    • R: Mai cu nimic, o să modific testul 3 să citească de la stdin.
  • Nu se testează și nu e specificat ce trebuie făcut dacă programul pe care îl gardăm nu există
    • R: Am adăugat un fișier în checker cu mesajul “The children program does not exist!”
      • Minor nitpick: ar trebui să fie “The child program does not exist”

R: Fixed, mersi :-)

so/teme/tema-asist/comentarii.txt · Last modified: 2013/01/31 21:57 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0