#!/usr/bin/perl use threads; use threads::shared; my ($stop) : shared; $stop = 0; my $running_t = threads->new(\&run, 2); my $listening_t = threads->new(\&listen, 1); sub listen { my $cd = 10; while ($cd > 0) { print "waiting ... $cd\n"; $cd--; } print "SIGNAL HEARD! STOP RUN()\n"; $stop = 1; } sub run { while(!$stop) { print "still running...\n"; } print "SIGNAL HEARD! STOPPING" } my @running_ret = $running_t->join; my @listening_ret = $listening_t->join; print "listen: @listening_ret\n"; print "run: @running_ret\n"; #### still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... . . # Note: truncated due to size of output . still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... still running... waiting ... 10 still running... still running... waiting ... 9 still running... waiting ... 8 still running... waiting ... 7 still running... waiting ... 6 still running... waiting ... 5 still running... waiting ... 4 still running... waiting ... 3 still running... waiting ... 2 still running... waiting ... 1 still running... SIGNAL HEARD! STOP RUN() still running... SIGNAL HEARD! STOPPING listen: 1 run: 1