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