Programovani - fork, exec a spol. (uz dost dlouhe)
David Sauer
davids na iol.cz
Pátek Leden 8 08:05:52 CET 1999
>>>> "David" == David Sauer <davids na iol.cz> writes:
>>>> "Petr" == Petr Novotny <Petr.Novotny na antek.cz> writes:
>>> Myslim, ze jedina moznost je, aby parent provedl 'signal(SIGCLD,
>>> SIG_IGN)'. Tim oznami, ze nema o exit status potomka zajem. Pokud
>>> to nemuze udelat, jak moc vadi ty zombie ?
Petr> Krome toho, ze jsou neesteticke :-) je hlavni problem v tom, ze by
Petr> pri kazde POP3 autentifikaci vznikl jeden.
David> Spise jde o to, jak takovy autentizacni proces bezi. Pokud se startuje
David> pokazde znovu, detske zombie (fuj, to je slovo) by nevadily. Pokud
David> bezi porad, tak by zombie asi zaplnovaly tabulku procesu, az by ji
David> zaplnily...
David> Jinak, signal(..) lze preci provest v odforkovanem procesu(nebo
David> ne?), asi takto:
Teda, to jsem to zamlzil. A navic jsem v tom vypisu to volani signal
zapomnel. V tomto pripade neni samozrejmne treba signal(...)
volat. Prvni detsky proces (PID = pid) skonci okamzite. Pokud by
nahodou detsky proces tohoto destskeho procesu(tedy proces /bin/ls)
skoncil drive, bude zombie existovat jen kratky cas. Takze volani
signal by bylo je pro forma.
David> #include <stdio.h>
David> #include <stdlib.h>
David> #include <signal.h>
David> int main()
David> {
David> // nedela zadne kontroly
David> pid_t pid = fork();
David> if( pid == 0 )
David> { // jsem dite
// ten zapomenuty signal()
// snad jen kdyby proces nevolal okamzite exit(0)
// ale jeste neco pocital ...
signal( SIGCLD, SIG_IGN); // neni nezbytne treba
David> if( fork() == 0 )
David> execl("/bin/ls", "ls", NULL);
David> else
David> exit(0);
David> }
David> else
David> { // jsem rodic
David> int status;
David> int options = 0;
// wait() nebo waitpid()
David> waitpid( pid, &status, options );
David> while(1);
David> }
David> return 0;
David> }
Jeste jednou sorry.
--
* David Sauer, student of Czech Technical University
* electronic mail: davids na iol.cz (mime compatible)
Další informace o konferenci Linux