in reply to Re: fork - alarm - output
in thread fork - alarm - output
Sample:
use strict; use warnings; use IO::Pipe; use constant TIMEOUT => 5; my @cmd = (); my $pipe = new IO::Pipe; if (my $pid = fork) { $pipe->reader; $SIG{ALRM} = sub { kill TERM => $pid; $SIG{ALRM} = sub { kill KILL => $pid; $SIG{ALRM} = sub { close $pipe; }; alarm TIMEOUT; }; alarm TIMEOUT; }; $SIG{CHLD} = sub { while (my $wait = wait) { alarm 0 if $wait == $pid; } }; # alarm here if you want force child to quit after TIMEOUT # alarm TIMEOUT; while (my $from_child = <$pipe>) { # alarm here if you want to interrupt child after inactivity # (no output lines) # alarm TIMEOUT; # ... }; alarm (0); close $pipe; } elsif (defined $pid) { # Child $pipe->writer; open STDOUT, '>&', $pipe; exec @cmd; } else { die "Fork failed: $!\n"; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: fork - alarm - output
by ikegami (Patriarch) on Jun 08, 2010 at 15:51 UTC | |
by happy.barney (Friar) on Jun 10, 2010 at 06:56 UTC |