in reply to fork, exec and pid

See exec:

If there is more than one argument in LIST, this calls execvp(3) with the arguments in LIST. If there is only one element in LIST, the argument is checked for shell metacharacters, and if there are any, the entire argument is passed to the system's command shell for parsing (this is /bin/sh -c on Unix platforms, but varies on other platforms).

What you get is your child PID, but the command is run through an intermediate shell, which then executes another shell.

You will need to either implement all the redirection yourself and use the list form of exec or write the command(s) to a shell script and exec that shell script. Some shells also can take a list of commands or a pipeline on their commandline, so maybe directly using the list form works too:

exec "/bin/sh", "/path/process.sh > /pathlogs/mylog.log";

Replies are listed 'Best First'.
Re^2: fork, exec and pid
by luxAeterna (Acolyte) on Oct 26, 2015 at 20:45 UTC

    Thanks a lot for the clarification, I have finally decided to implement the redirection myself and skip the intermediate shells:

    #child print "This is child $$\n"; open STDERR, '>&STDOUT'; open STDOUT, '> /pathlogs/mylog.log'; my $command='sh /path/process.sh'; exec($command);

    This way, killing the pid of the child, we kill the command process and I also get the redirections.

    It also seems to work with

    #child print "This is child $$\n"; open STDERR, '>&STDOUT'; open STDOUT, '> /pathlogs/mylog.log'; my $script='/soft/perl-version/bin/perl /path/process.pl'; exec($script);

    I will clearly have to research more to use correctly exec and pid managing :)