package Apache::SubProcess; use strict; use DynaLoader (); use Exporter (); *import = \&Exporter::import; { no strict; $VERSION = '0.03'; @ISA = qw(DynaLoader); if ($ENV{MOD_PERL}) { __PACKAGE__->bootstrap($VERSION); } @EXPORT_OK = qw(system exec); } sub parse_pgm { my $list = shift; my($pgm, @args) = split /\s+/, shift @$list; push @args, @$list if @$list; return($pgm, \@args); } sub __system { my($is_exec, $aref) = @_; my $r = Apache->request; my($pgm, $args) = parse_pgm($aref); #warn "__system: $pgm ", (map { "`$_', " } @$args), "\n"; my $fh = $r->spawn_child(sub { my $r = shift; $r->filename($pgm); $r->args(join '+', @$args) if @$args; $r->call_exec; }); $r->send_fd($fh); $r->pfclose($fh); if ($is_exec) { $ENV{PERL_DESTRUCT_LEVEL} = -2; Apache::exit(-2); } } sub system { __system(0, \@_); } sub exec { __system(1, \@_); } 1; __END__->