Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Can I run a piece of code like child process?

by Anonymous Monk
on Oct 03, 2000 at 21:18 UTC ( [id://35146]=perlquestion: print w/replies, xml ) Need Help??

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question: (programs and processes)

HI,I want to run a piece of code (i.e A subroutine) in my script and the main code will not wait for his done.
The main code should go on and will not be care of whether the subroutine run correctly.
I don't want to use fork(),because child process occupy too many memory.Is there a way?
Thank you!

Originally posted as a Categorized Question.

Replies are listed 'Best First'.
Re: Can I run a piece of code like child process?
by tilly (Archbishop) on Oct 03, 2000 at 22:05 UTC
    Use fork anyways. It is more efficient than you think.

    See Threads vs Forking (Java vs Perl) and subsequent discussion (particularly the article that KM pointed out).

    And don't use threads if you care about reliability, stability, and all that. Perl's threading does...interesting things.

      The short answer is yes. But it really depends on what you're doing as to whether it makes sense to. #!/usr/local/bin/perl my $string = "print \"hello\\n\";"; if (fork() == 0) { system "perl -e '$string'"; }
Re: Can I run a piece of code like child process?
by OzzyOsbourne (Chaplain) on Oct 03, 2000 at 22:18 UTC
    I honestly have not checked the overhead on win32::process, and most people seem to be against it but I use:
    use Win32::Process; @servers=('server1','server2','server3'); sub ErrorReport{ print Win32::FormatMessage( Win32::GetLastError() ); } foreach $server (@servers){ Win32::Process::Create($ProcessObj, "c:\\perl\\bin\\perl.exe", "perl.exe c:\\script.pl -s$server", 0, NORMAL_PRIORITY_CLASS, ".")|| die ErrorReport(); #$ProcessObj->Suspend(); #$ProcessObj->Resume(); #$ProcessObj->Wait(INFINITE); }
    With the wait remmed out, the sub will not wait for the process.
Re: Can I run a piece of code like child process?
by Eradicatore (Monk) on Jun 06, 2001 at 20:02 UTC
    From what I've experienced and researched so far on win32 and NT is that its easiest maybe to use fork. From what I can tell, fork on win32 is like a hybrid between a true fork and a thread. It doesn't create a new seperate process as seen by the task manager, but it also does not have access to global variables in the parent like a thread should.

    My example shows how to use fork together with Tk to get web pages but not interfere with the gui. The child just sits there waiting for urls to get. You will have to add proxy support if you're behind a firewall though.

    Oh, also, you want to make sure you download the right version of perl that supports fork. You can get this from active state at here

    #!/usr/local/bin/perl use POSIX; use Tk; use LWP::UserAgent; use URI::URL; pipe(FROM_P, TO_C) or die "pipe: $!"; select(((select(TO_C), $| = 1))[0]); my $ua = LWP::UserAgent->new; if (!($pid = fork)) { close(TO_C); while($line = <FROM_P>) { print "Child Pid $$ just read this: $line\n"; chomp($line); $url = $line; $file = 'yahoo.txt'; my $req = HTTP::Request->new(GET => $url); $req->header('Accept' => 'text/html'); $res = $ua->request($req, $file); }; } my $mw = MainWindow->new(); $button = $mw->Button(-text => "click here to download yahoo web page" +, -activebackground => 'red', -command => \&printit)->pack(); print "i'm the parent about to mainloop\n"; MainLoop; sub printit { print TO_C "http:\/\/www\.yahoo\.com\n"; }

    Justin Eltoft

    "If at all god's gaze upon us falls, its with a mischievous grin, look at him" -- Dave Matthews

Re: Can I run a piece of code like child process?
by AgentM (Curate) on Oct 03, 2000 at 21:30 UTC
Re: Can I run a piece of code like child process?
by harpreet (Initiate) on Aug 08, 2001 at 20:09 UTC
    Thanks a lot guys for helping me out...even I was looking out for a way to run a child process without the parent process having to wait....thanks for helping Harpreet

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://35146]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2024-03-19 09:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found