#! perl -slw use strict; use Time::HiRes qw[ time sleep ]; use IO::Socket; $|++; my $port = 54321; socket( SOCKET, PF_INET, SOCK_DGRAM, getprotobyname('udp') ) or die "socket: $!"; setsockopt( SOCKET, SOL_SOCKET, SO_REUSEADDR, 1 ); bind( SOCKET, sockaddr_in( $port, inet_aton( 'localhost' ) ) ) or die $^E; my $true = 1; ioctl( SOCKET, 0x8004667e, \$true ); my $pid = system 1, "/perl64/bin/perl.exe", "monitored.pl",$port; my $time; while( kill 0, $pid ) { my $addr = recv( SOCKET, $time, 1024, 0 ) or select '','','',0.001; printf "\rProgress:%s\t", $time; } print "All done."; #### #! perl -slw use strict; ## monitored.pl use IO::Socket; $|++; my $port = shift; socket( SOCKET, PF_INET, SOCK_DGRAM, getprotobyname('udp') ) or die "socket: $!"; my $runtime = rand( 120 ); for my $milli ( 0 .. $runtime * 1000 ) { select '','','', 0.001; send( SOCKET, sprintf( "\r%.f%%\t", $milli / ($runtime*10) ), 0, sockaddr_in( $port, inet_aton( 'localhost' ) ) ) or die "send: $^E"; }