Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

The whole point of the fork system call is (a little simplified) to make a copy of the process - from the point of the fork call onwards there are two copies of your code executing. In one of them, fork() returns the PID of the child (that's the parent), and in the other (the child), it returns 0. So yes, both the if and elsif blocks are supposed to be executed, but in different processes.

Try prefixing all of your output with the current PID, $$:

#!/usr/bin/env perl use warnings; use strict; print "[$$] Starting main program\n"; my @childs; for my $count (1..3) { if ( my $pid = fork ) { # parent print "[$$] child pid is $pid\n"; push @childs, $pid; } elsif ( defined $pid ) { # child sub1($count); exit 0; } else { die "[$$] couldn't fork: $!" } } for my $pid (@childs) { my $tmp = waitpid($pid, 0); print "[$$] done with pid $tmp\n"; } print "[$$] End of main program\n"; sub sub1 { my $num = shift; print "[$$] started child process for $num\n"; sleep $num; print "[$$] done with child process for $num\n"; return $num; }

Which outputs, for example:

[7685] Starting main program [7685] child pid is 7686 [7686] started child process for 1 [7685] child pid is 7687 [7687] started child process for 2 [7685] child pid is 7688 [7688] started child process for 3 [7686] done with child process for 1 [7685] done with pid 7686 [7687] done with child process for 2 [7685] done with pid 7687 [7688] done with child process for 3 [7685] done with pid 7688 [7685] End of main program

Which looks fine to me. You get three children executing sub1 and a parent that manages the children.


In reply to Re: how come both the if and elsif block getting executed ? by Anonymous Monk
in thread how come both the if and elsif block getting executed ? by ghosh123

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (2)
As of 2024-04-24 15:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found