http://www.perlmonks.org?node_id=220511


in reply to Re: perl fork cmd on Windows 2000
in thread perl fork cmd on Windows 2000

The build of perl i'm using was developed to specifically suit the application i'm working on. So, it is not feasible to change completely to the build provided by Activestate. Plz...Can some more workarounds or codes be suggested by The Monk Community?

Pardon if this young monk is overstating.. I heard theres a library to handle proccesses and spawn child processes with Create, Wait etc. in win32-perl. Does anyone have more details or code segments to give a better idea abt this??

tachyon..Thanks anyway for ur suggestion. The fork code does work under Active PERL !

Replies are listed 'Best First'.
Re: Re: Re: perl fork cmd on Windows 2000
by Rich36 (Chaplain) on Dec 17, 2002 at 14:35 UTC

    You can spawn off another process using Win32::Process. Below is some code I used to open a file in Notepad from a Tk program. Win32::Process is documented pretty well and there are plenty of examples out there. As other monks have stated, I'd be very wary of using fork with Perl on Windows. I've experimented with fork some on Windows and it seems like if you created more than a couple processes, it would crash in various ways.

    my $ProcessObj; Win32::Process::Create($ProcessObj, 'C:/WINNT/notepad.exe', "notepad $file", 0, NORMAL_PRIORITY_CLASS, ".")|| die "Couldn't open the file $file\n";

    «Rich36»
      Thanks for ur suggestion. Win32::process works fine in creating a process, but does it work the same way as a thread..?

      Actually, I am looking for a way to call another perl script file from a script, so the called script will run on the background.To be more specific, even if the file(called-script) i am calling leads to a infinite loop, the calling-script must continue executing...

      Is it possible to do this using Win32::Process ? Does anyone know how to go about it ?

        You can use Win32::Process to start a second copy of Perl as a seperate process, and run the second script there if that will fulfill your requirements. You can specify DETACHED_PROCESS when you call Win32::Process:Create(...); which will deal with that part.

        What you haven't said so far is whether you want the ability for the 2 scripts to communicate. You can do this with either Win32::Pipe or sockets.

        You also haven't said whether you need to actively kill the background process in the event that it goes ary or runs too long. Win32::Process::KillProcess() or $pid->Kill(); will take care of the first part if needed and then you only have to decide when. Whether by timing or some other mechanism, but more details on your requirements would help.


        Examine what is said, not who speaks.

Re: Re: Re: perl fork cmd on Windows 2000
by tachyon (Chancellor) on Dec 17, 2002 at 21:58 UTC

    The build of perl i'm using was developed to specifically suit the application i'm working on.

    That's an interesting idea. Normally I write software to fit within the framework of the language rather than modify the language.....With a languague as internally complex as Perl 5 you really have to wonder who thought that was a good idea and why?

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print