Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Re: Re: Re: perl fork cmd on Windows 2000

by Rich36 (Chaplain)
on Dec 17, 2002 at 14:35 UTC ( #220528=note: print w/replies, xml ) Need Help??

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

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";


Replies are listed 'Best First'.
Re: Re: Re: Re: perl fork cmd on Windows 2000
by TheYoungMonk (Sexton) on Dec 18, 2002 at 05:36 UTC
    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.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://220528]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2021-04-20 16:53 GMT
Find Nodes?
    Voting Booth?

    No recent polls found