# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1352057782 -3600 # Node ID 383d9f5021f804b332647c5e85d491a954a5bb19 # Parent 491292dcec7f9d0f5da7c12842e5502c82d4f028 [works] diff -r 491292dcec7f -r 383d9f5021f8 pdd --- a/pdd Sat Nov 03 21:01:49 2012 +0100 +++ b/pdd Sun Nov 04 20:36:22 2012 +0100 @@ -8,8 +8,10 @@ sub dd; sub timer; sub main; +sub kbd; MAIN: { + $| = 1; my $dd; $SIG{INT} = sub { @@ -29,7 +31,8 @@ # the timer runs in its own thread, there it will # send a USR1 every now and then to the $dd process - my $timer = threads->create(\&timer, $dd); + threads->create(\&timer, $dd); +# threads->create(\&kbd, $dd); printf "%8s %8s %8s %15s %3s\n", "time", "MB", "M/s", "speed", "done"; @@ -59,8 +62,8 @@ $size = $+{size}; } - $timer->kill("KILL"); - $timer->join; + map { $_->kill("KILL") } threads->list; + map { $_->join } threads->list; if (defined $dd) { waitpid($dd, 0) == $dd or die "unexpected kid died\n"; @@ -88,6 +91,8 @@ local $SIG{"KILL"} = sub { threads->exit }; my $i = 0; + # just sleep 1 second to make the thread killer more + # that what we would expect while (1) { sleep 1; kill "USR1" => $pid @@ -95,3 +100,12 @@ } } +sub kbd { + my $pid = shift; + local $SIG{"KILL"} = sub { threads->exit }; + open(KBD, "/dev/tty") or die "Can't open /dev/tty: $!"; + while () { + kill "USR1" => $pid; + } + close(KBD); +}