#!/usr/bin/perl use strict; use warnings; pipe PREAD, CWRITE; # child -> parent if (fork) { parent1(); } else { child(); } sub child { close PREAD; # child - close parent end of pipe print "child: start of proccess\n"; syswrite CWRITE, "0\n"; for (1..5) {print "child zZZZzzz\n";sleep 1;} print "child is awaking\n"; syswrite CWRITE, "$_\n" for 1 .. 10; print "child ending\n"; exit; } # sub child sub parent1 { close CWRITE; # parent - close child end of pipe chomp(my @erg = ); print "parent got ", join(' - ', @erg), "\n"; print "parent : ", (eof(PREAD)?'ENDE':'keine Ende'), "\n"; } # sub parent1 sub parent2 { close CWRITE; # parent - close child end of pipes my @erg; eval { $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required alarm 2; chomp(@erg = ); alarm 0; }; if ($@) { die "other error : $@" unless $@ eq "alarm\n"; # propagate unexpected errors warn "parent : child got time out!\n"; } else { alarm 0; # Ist das wirklich notwendig? print "parent got ", join(' - ', @erg), "\n"; print "parent : ", (eof(PREAD)?'ENDE':'keine Ende'), "\n"; } } # sub parent2