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);'