luxAeterna has asked for the wisdom of the Perl Monks concerning the following question:
I have a parent thread who forks a child which executes a script with exec, after a time, it kills such child (using the pid of the child forked)
This works wonderfuly
my $pidChild; my $pid0=fork(); if ($pid0) { #parent process $pidChild=$pid0; print "Parent has launched child $pid0\n"; sleep(10); my $killed=kill 'KILL', $pidChild; if ($killed) { print "Parent has killed child $pid0\n"; } sleep(5); my @alive=`ps aux | grep process | grep -v grep`; print "@alive\n"; } else { #child print "This is child $$\n"; my $command='sh /path/process.sh'; exec($command); }
until I try to redirect the output of the executed script, then the pid changes.
my $pidChild; my $pid0=fork(); if ($pid0) { #parent process $pidChild=$pid0; print "Parent has launched child $pid0\n"; sleep(10); my $killed=kill 'KILL', $pidChild; if ($killed) { print "Parent has killed child $pid0\n"; } sleep(5); my @alive=`ps aux | grep process | grep -v grep`; print "@alive\n"; } else { #child print "This is child $$\n"; my $command='sh /path/process.sh 2>&1'; exec($command); }
Also fails if I try to redirect the output to a file
my $command='sh /path/process.sh > /pathlogs/mylog.log';
Why the redirection changes the pid? Are the script I am trying to execute and the redirection of its output different processes? What is it happening inside there?
Thank you a lot in advance for clarifying this mistery...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: fork, exec and pid
by Corion (Patriarch) on Oct 25, 2015 at 19:54 UTC | |
by luxAeterna (Acolyte) on Oct 26, 2015 at 20:45 UTC |