PERL - problem s EXECem
Milan Kerslager
milan.kerslager na spsselib.hiedu.cz
Úterý Červen 24 21:52:12 CEST 1997
> Kdyz napisu v PERLu program:
> print "1";
> exec("dir -l");
> print "2";
>
> tak to na tom EXECu vzdycky skonci a nepokracuje to dal, nevite nekdo jak
> to udelat aby se program pokracoval normalne dal i za EXECem.
Pravdepodobne jste chtel pouzit prikaz system().
Navic dir je urcite alias. To bych neriskoval.
system("ls -l > /tmp/vypis") && die "Nemohu zapsat do /tmp/vypis";
Pokud byste chtel ten vypis zpracovavat v programu, bylo by lepsi pouzit
open(VYST,"ls -l |");
while (<VYST>) {
[...]
}
Schema funkce fork & exec (A a B jsou programy):
A (rodic)
|
fork
| \
rodic potomek (novy proces)
| \
A exec(B)
| |
| B
| |
| konec
|
| zde by si mel rodic vyzvednout navratovy kod B,
jinak nam zustane po B zombie
Samozrejme exec na B nemusi byt proveden.
V programu A to pak vypada treba takhle:
if (fork) {
# zde pobezi rodic
wait; # rodic ceka na dokonceni ditete
# wait muze byt az nekdy pozdeji v tele rodice za if
} else {
# zde pobezi potomek
exit; # jinak v tom bude gulas
}
# zde pokracuje rodic
Lepsi konstrukce (fork se nemusi vzdy zadarit)
unless (fork) {
# potomek
exit;
}
# rodic pokracuje dal
Milan Kerslager, admin of spsselib.hiedu.cz
Monkey Linux, The Minimal Linux Distribution
See: http://www.spsselib.hiedu.cz/monkey/
Další informace o konferenci Linux