From: "Chas. Owens" <chas.ow...@gmail.com>
> On Wed, Feb 18, 2009 at 12:14, Chuck <c...@unity.ncsu.edu> wrote:
> > Hello,
> >
> > We have a GUI where, if a button is clicked, Putty (the remote access
> > program) is launched using
> >
> > System("C:\\Progra~1\\Putty\\putty.exe");
> >
> > is launched. However, when this is executed, the original GUI freezes,
> > and we cannot use it unless we close Putty. We tried using the fork()
> > command like this:
> >
> > my $pid = fork()
> >
> > if ( $pid == 0 ) {
> >  System("C:\\Progra~1\\Putty\\putty.exe");
> >  exit 0;
> > }
> >
> > Now, if we run it, we can use the original GUI while Putty is running,
> > but when we close Putty, we get an error message along the lines of,
> > "The Perl Command Line Interpreter has stopped working" and the GUI
> > kills itself. Does anyone know what the problem might be, or how we
> > can launch Putty without freezing the GUI or causing it to kill itself
> > after closing Putty?
> >
> > Thanks a lot.
> 
> Try replacing the system with exec*.  The exec function will replace
> the currently running process (Perl) with the new one (Putty).
> 
> * http://perldoc.perl.org/functions/exec.html

Or maybe not. It will do that under Unix and something as similar as 
possible under different operating systems. In this case both the 
fork() and the exec() are doing something a little different than 
they wound under a Unix and the details of the differences are the 
culprit.

Replacing the system() by exec() might help though.

The catch is that fork() doesn't create a process under Win32, but a 
thread so if you use system() the exit probably kills the whole 
process, not just the new thread. Though in my perl 5.8.8 build 822 
works fine with both.


In either case if all you need is to start the other process without 
waiting for its completion you can use

  system(1, "the\\path\\to\\the.exe");

Jenda
===== je...@krynicky.cz === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
        -- Terry Pratchett in Sourcery


-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to