Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hello All,

I am not sure if I am describing it correctly but will paste a chunk of my code to explain properly, where I am getting stuck.

$trigger='OFF'; my $pid = fork(); if ($pid == 0) { #some process invoked on xterm if (process invoked on xterm gives a signal){ $trigger='ON'; } exit 0; } my $pid = fork(); if ($pid == 0) { #some other process on xterm if( $trigger eq 'ON') { #------->This has value OFF as declared g +lobally. I want this to have value from previous process. What do I d +o? #do something exit 0; }

Replies are listed 'Best First'.
Re: Access value of a variable after exit 0 in fork
by NetWallah (Canon) on Dec 27, 2012 at 07:33 UTC
    The simplest would be to return a small numeric value via the exit code of the sub-process, read that in the parent process, and translate that in you main code to set $trigger to "ON".

    The problem you currently have is that $trigger in the child process is in a different memory space, and modifying that in the child has no effect on the parent's instance of $trigger.

                 "By three methods we may learn wisdom: First, by reflection, which is noblest; Second, by imitation, which is easiest; and third by experience, which is the bitterest."           -Confucius

      Can you please elaborate via some code? Sorry to give you trouble,but just want to understand thoroughly.
        See perlipc and waitpid
        if( my $pid = fork() ){ print "parent ($$) is waiting on child $pid\n"; my $kid ; do { $kid = waitpid(-1, WNOHANG); } while $kid > 0; my $exit = $? >> 8; die qq{Kid ($kid) exited with $? / $exit \n}; } else { print "I am the kid $$\n"; sleep 1; #~ exit 666; ## too big exit 12; } __END__ parent (1724) is waiting on child -880 I am the kid -880 Kid (-880) exited with 3072 / 12

        There are abstractions to help you manage this like Parallel::ForkManager, Proc::Fork, forks, threads ....