[works]
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Sun, 04 Nov 2012 20:36:22 +0100
changeset 1 383d9f5021f8
parent 0 491292dcec7f
child 2 6fae69860129
[works]
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 (<KBD>) {
+	kill "USR1" => $pid;
+    }
+    close(KBD);
+}