$self->msg('execute', dir => Cwd::getcwd(), cmd => $self->{cmd}, 'eval' => $cmd); my $pid = open EXEC, "-|", "($cmd)2>&1" or die "Could not start command."; foreach ( qw{ ABRT ALRM BREAK FPE HUP ILL INT PIPE QUIT SEGV STOP TERM } ) { $SIG{$_} = sub { warn "$self->{-full}: Signal $_ caught"; $self->msg('signal', signal => $_[0]); kill $_[0], $pid; }; } foreach ( qw{ USR1 NUM16 } ) { $SIG{$_} = sub { warn "$self->{-full}: Signal $_ caught"; $self->msg('signal', signal => 'KILL'); kill 'KILL', $pid; }; } while () { chomp; $self->msg('execute', output => $_); } close EXEC; $self->set(status => $?, stop => Scheduler::Time::utc); foreach ( qw{ ABRT ALRM BREAK FPE HUP ILL INT PIPE QUIT SEGV STOP TERM USR1 NUM16 } ) { $SIG{$_} = 'DEFAULT'; };