#!/usr/bin/perl while (<>) { die "Pipe process is now dead\n" if ( /kill/ ); print "Pipe process got $_"; exit(0) if ( $. == 5 ); } #### #!/usr/bin/perl use strict; my ($useSig,$useKill,$useSleep) = (1,0,1); my $deadPipe = 0; $SIG{PIPE} = \&catchSIGPIPE if $useSig; $|++; # Don't buffer stdout open( TOPIPE, "| /tmp/test.perl" ) || die "Pipe process would not start\n"; select TOPIPE; $|++; # Don't buffer TOPIPE my @test = qw/zero one two three four five six/; $test[2] = "kill" if $useKill; print STDOUT "Config: useSig=$useSig, useSleep=$useSleep, useKill=$useKill\n"; for (@test) { last if ( $useSig && $deadPipe ); print STDOUT "sending $_ to pipe process\n"; print TOPIPE "$_\n" or last; sleep 2 if $useSleep; } sub catchSIGPIPE { $deadPipe++; }