#! /usr/bin/perl use strict; use constant DUMMY => 1; use Socket; use IO::Handle; socketpair(CHILD, PARENT, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or die "socketpair client: $!"; CHILD->autoflush(1); PARENT->autoflush(1); if (my $kid = fork) { close PARENT; for my $key( @ARGV ) { print "parent($$) send [$key]\n"; print CHILD "$key\n"; chomp(my $line = ); print "parent($$) recv [$line]\n"; } close CHILD; waitpid($kid,0); } else { die "cannot fork: $!" unless defined $kid; close CHILD; if( DUMMY ) { while( chomp(my $line = ) ) { print "child($$) recv [$line]\n"; select undef, undef, undef, 0.2; if( rand() < 0.5 ) { my $now = "$line " . time; print "child($$) send [$now]\n"; print PARENT "$now\n"; } } close PARENT; } else { exec qw{ /bin/foo -c bar } or die "child could not exec: $!\n"; } }