my $pid = open(T, "tcpdump ...|"); eval { while (1) { $SIG{ALRM} = sub { die "time to stop" } alarm(20); my $line = ; # read a line from tcpdump alarm(0); last unless defined($line); # process line } }; kill 9, $pid; close(T);