logo       

Re: forking an external process: msg#00023

gnome.gtk+.perl

Subject: Re: forking an external process

On Tuesday 07 May 2002 9:04 pm, you wrote:
> hi
>
> I want my gui to be accesable even when an external process is doing
> some work.
> My program does the following:
> initialise the GUI
> exec of a wget process
> wait for it to return
> do somthing to the return which will update the GUI (add rows to a
> clist)
>
> as it is now it hangs while the wget process is running. I have tried to
> fork it but it doesnt work:
> sub getnews{
> $clist->clear();
> if (fork() == 0) {
> exec("wget http://www.slashdot.org/slashdot.rdf -nv -q -O \
> slashdot.rdf");
> exit(0);
> }
> parse_xml();
> }
>
> what have I done wrong? the parse_xml part is only to be runned when the
> exec has returned somthing

As others have said all that is needed, I'll just add some problems you
probabley won't know about so get confused/worried/want to kill perl when you
come across them:
In any perl: forked processes become zombies after they die, and send a
SIGCHLD to the main process (I'm assuming unix as you are using wget) and you
have to reap your zombies, this is mentioned in the 'camel' book near
forking, so it should be easy to find more indepth information I would guess,
if you can't find any, mail me and I'll be happy to spend some time
explaining.

With GTK and perl you have to use _exit() to exit a fork, due to some complex
reason, otherwise you get some horrid errors about x libaries and you get all
confused (at least I did).

Toby


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise