Howdy!

On Wed, 24 Feb 1999, Rok Papez wrote:

> Ce sem prav razumel execv povozi parent proces. Jaz bi
> pravzaprav rabil execv ki nebi povozil svojega starsa.
> Torej; kako se pod Liuxom pozene child process kot nek
> drug proces, tako da child obdrzi vse file handle od
> parenta in parent pocaka da child konca in sele nato 
> nadaljuje z izvajanjem..,
> 
> Samo upam da ne bo fork() && execv() :p.

Hja, pa cisto nic drugace ne gre. Sicer pa je easy:

    forked=vfork();
    if (!forked) {
        /* some child stuff */
        execl ("/bin/sh", "sh", "ls", NULL);
        exit (0);
    }
    else {
        /* parent samo caka, da child konca z delom */
        waitpid (forked, NULL, 0);
    }

A je to mogoce komplicirano?

Se pojasnilo, zakaj vfork()/execl() namesto fork()/execv().
Pod linuxom je vfork() alias za fork(), pod HP-UX (za katerega sem
razvijal program) pa je razlika v hitrosti:

      vfork() differs from fork() only in that the child process can share
      code and data with the calling process (parent process).  This speeds
      cloning activity significantly at a risk to the integrity of the
      parent process if vfork() is misused.

execl() namesto execv() sem uporabil, ker sem moral klicanemu programu
podati parametre. Poganjal sem recimo '/bin/sh ls' in ne '/bin/ls' (pri
cemer je bil /bin/ls v resnici shell skripta).

Peace!
  Mkx

---- perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'

Reply via email to