spawn("./ntlogin.sh",undef,"data.out"); exit(0); # # spawn($cmd[,$env_vars,[,$stdout_log[,$stderr_log]]]) # $cmd = the command to execute # $env_vars = anonymous hash containing special environmenal # values (eg VAR => VALUE) # $stdout_log = a path to a log file for stdout # $stderr_log = a path to a log file for stderr sub spawn { my ($cmd_to_exec,$env_vars,$stdout_log,$stderr_log)=@_; my $pid=fork(); #Fork off! if ($pid > 0 ) { # This is the parent process return $pid; } elsif ( $pid == 0 ) { # this is the child if ($env_vars) { # # We have special environmental vars to pass foreach my $key(keys %$env_vars) { $ENV{$key}=$env_vars->{$key}; } } # # Next we want to close STDOUT and STDERR close STDOUT; close STDERR; # # Check to see if we have a filename passed if ($stdout_log) { # # If there is no stderr_log if (! $stderr_log) { $stderr_log=">&STDOUT"; } else { $stderr_log="> " . $stderr_log; } $stdout_log="> $stdout_log"; open STDOUT,$stdout_log or die "$stdout_log:$!"; open STDERR,$stderr_log or die "$stderr_log:$!"; } # # Finally we exec the command exec $cmd_to_exec or die "$cmd_to_exec: $!"; } else { die "Could not fork! :$!"; } }