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...
In reply to fork, exec and pid by luxAeterna
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |