[pso] [Tema1 linux] Problema current
Octavian Voicu
octavian.voicu at gmail.com
Sat Mar 20 17:47:57 EET 2010
2010/3/20 Bogdan Nitu <nitubogdan_cc at yahoo.com>
> Current nu intoarce ce trebuie cand nobody isi face copil.
>
> Eu o am o problema cu testul de la monitor. In functia ret=msyscall(sno,
> args) se face apel de sistem si apoi se apeleaza system pentru 'dmesg | grep
> .....' (pentru testare). Cand se face apelul msyscall(sno, args) la mine in
> modul campurile comm si pid din current nu sunt 'test' si pid-ul
> corespunzator, ci 'grep' si alt pid in schimb. Daca in loc de system in
> fisierul de testare fac fork la fel se intampla, modulul imi vede in current
> nu procesul curent, ci pe cel al copilului sau (dmesg | grep ....). Daca nu
> se face system in test (sau fork), current este ok in modul. Nu inteleg.
> Pana la testul cu do_monitor trec testele, nu vad vreo greseala in modul
> (current nu intoarce ce trebuie cand nobody isi face copil).
>
Comanda system("dmesg | grep ...") porneste in total 3 procese. Primul este
shell-ul care primeste intr-un parametru comanda de executat, "dmesg |
grep". Apoi desparte comanda asta in doua bucati si porneste 2 noi procese,
dmesg si grep, legandu-le printr-un pipe.
Totusi, syscall-ul in sine, msyscall, este executat doar de procesul parinte
(deci relativ la procesul cu comm == "grep", current->parent->parent->pid
este pid-ul care va executa syscall-ul). Daca iei syscall-ul open, el e
folosit de multe ori pt fiecare rulare de comanda (trebuie sa deschide
binarul aplicatiei + toate librariile si alte fisiere, vezi "strace grep" de
exemplu).
Asa cum am mai spus intr-un mesaj, testeaza cu un syscall care nu e asa
folosit -- de exemplu getgid, uname.
Octavian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20100320/422a56ba/attachment-0001.htm>
More information about the pso
mailing list